2013-07-28 1 views
7

У меня есть два массива:Создание одного массива в точности равного другие

var array1 = [1, 2, 3]; 
var array2 = [4, 5, 6]; 

хочет массив 1, чтобы быть в точности равен матрицу 2. Я сказали, я не могу просто сделать:

array1 = array2; 

Если я не могу это сделать, как я могу сделать array1 равным array2?

Благодаря

+4

'array1 = array2.slice (0)'? – DCoder

+0

@DCoder Если это ответ на мой вопрос, почему бы не отправить его в качестве ответа? : P – jskidd3

+0

Почему бы вам не сделать 'array1 = array2;'? –

ответ

12

Если вам просто нужна копия элементов массива, вы можете просто использовать кусочек, как это:

a = [1,2,3] 
copyArray = a.slice(0) 
[1 , 2 , 3] 

А почему вы не должны использовать здесь присваивания посмотреть на этом примере:

a = [1,2,3] 
b = a 
a.push(99) 
a 
[1,2,3,99] 
b 
[1,2,3,99] 

Если скопировать массив у вас нет этой проблемы:

a = [1,2,3] 
b = a.slice(0) 
a.push(888) 
a 
[1,2,3,888] 
b 
[1,2,3] 
+0

Имеет ли это тот же эффект, что и для copyArray = a? – jskidd3

+0

Спасибо за редактирование. Отличный ответ! – jskidd3

+0

Я подобрал свой ответ, чтобы показать разницу –

0

Для глубокой копии вашего массива, сделать это (REFERENCE):

function deepCopy(obj) { 
    if (Object.prototype.toString.call(obj) === '[object Array]') { 
     var out = [], i = 0, len = obj.length; 
     for (; i < len; i++) { 
      out[i] = arguments.callee(obj[i]); 
     } 
     return out; 
    } 
    if (typeof obj === 'object') { 
     var out = {}, i; 
     for (i in obj) { 
      out[i] = arguments.callee(obj[i]); 
     } 
     return out; 
    } 
    return obj; 
} 
0

Это будет делать трюк:

var clone = originalArray.slice(0); 
+0

Это то же самое, что и clone = originalArray? – jskidd3

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