2013-12-02 2 views
2

Я пытаюсь сделать копию яваскрипта массива и изменить «копию» без изменения исходной переменной тоже может кто-нибудь объяснить, что я делаю неправильно ..Javascript - передать переменную по ссылке вопрос

например

var array1 = [2, 5]; 
var array2 = ''; 

array2 = array1; 
array2.pop(); 
console.log(array1); 
console.log(array2); 

// both output the same, however I want it to show array1 with 1 single item 

Я пытаюсь сделать так, array2 будет содержать только один элемент в массиве & array1 будет содержать два элемента в массиве. Любые идеи, что я делаю неправильно?

ответ

2

Для того, чтобы создать копию массива, а не назначать опорное значение, которое вы можете использовать метод .slice.

array2 = array1.slice(0); 

фрагмент возвращает (неглубокий) копию данного массива от заданного индекса до (необязательного индекс конца)

+0

array2 = array1.slice (1); - Кажется, это работает для меня, используя 1, а не 0, это то, что все еще правильно (извините за вопросы noob) :) – Zabs

+1

@Zabs Вам не нужно извиняться за задание вопросов :) Вот для чего этот сайт. если вы используете '.slice (1)', он возвращает кусочек 'array1', не содержащий элемент в позиции 0. –

+0

Спасибо, чувак! +1 для объяснения :) – Zabs

1

Используйте slice(), чтобы скопировать массив.

var array1 = [2, 5]; 
    var array2 = ''; 

    array2 = array1.slice(0); 
    array2.pop(); 
    console.log(array1); 
    console.log(array2); 

срез не изменяет исходный массив, но возвращает новую «один уровень глубокой» копию, которая содержит копии элементов нарезанных из исходного массива.

Documentation

0

Alter линия array2 = array1; к:

array2 = array1.slice(0); 

метод Кусочек возвращает (поверхностную) копию заданного массива из заданного индекса к (по желанию индексу конца)

Надеюсь, это поможет.

+0

очень ценим! – Zabs

0

Это так просто, как с помощью функции среза:

var array1 = [2, 5]; 
var array2 = ''; 

array2 = array1.slice(); 
array2.pop(); 
console.log(array1); 
console.log(array2); 

Здесь вы рассказываете JavaScript, чтобы получить копию элементов в array1 и присвоить результат массив2. Не устанавливая начальную и конечную позицию, он будет срезать весь массив.

0

При написании этой

array2 = array1 //It creates reference on array1 object 
array2.pop() // removes 5 from both end 

Таким образом, вы должны клонировать один массив в другой по методу среза() ---

array2 = array1.slice(0) // cloning array1 's element to array2 
array2.pop() // removes 5 from only array2 not from array1 

Теперь работает отлично

+0

'array1' является ссылкой – newacct

+0

нет, array2 является ссылкой на array1 – Arjun

+0

№' array2' и 'array1' являются обеими ссылками (указатели на объекты). – newacct

Смежные вопросы