2013-09-06 3 views
3

У меня есть массив ["0", "1", "2"], и мне нужно создать функцию, которая делает ее
["0", "1", "2", " «0», «1», «2»]. Я написал эту функцию клона:Javascript - массив клонов внутри себя

arr = [0, 1, 2]; 
arr.clone = function() { 
    var b = []; 
    for (var i = 0; i < arr.length; i++) { 
     b.push(arr[i]); 
    } 
    var c = b.concat(b); 
    return c; 
} 
arr.clone(); 

Имею ли я это правильно? Может быть, есть лучший или более короткий способ клонирования элементов?

ответ

4

Вы только должны использовать concat() сам по себе, так как он создает новый массив:

var arr = [0, 1, 2]; 
arr = arr.concat(arr); // [0, 1, 2, 0, 1, 2] 
0

ответ Фредерика Hamidi, вероятно, является лучшим ответом, если все ваши целевые браузеры поддерживают Array.concat метод, и вы не ум, создающий новый массив.

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

arr.push.apply(arr, arr); 
+0

Спасибо за ответ. Дело в том, что в моей задаче мне нужно добавить функцию clone к прототипу моего массива. И когда я пытаюсь вставить массив в себя, эта функция тоже добавлена. Поэтому я получаю что-то вроде этого '[0, 1, 2, 0, 1, 2, foo: function]' –

0
// try this 
Array.prototype.self2 = function() { 
    return (Array.prototype.push.apply(this, this), this); 
}; 
console.log([1,2,"a"].self2()); 
// 
// [1, 2, "a", 1, 2, "a"] 
//