2013-09-06 2 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

대상 브라우저의 모든 Array.concat 방법을 지원하는 경우 프레데릭 Hamidi의 대답은 아마도 가장 좋은 대답, 당신은하지 않습니다 새로운 배열을 만드는 것이 중요합니다.

새 배열을 만들지 않고 이전 배열 참조를 유지하는 방법은 다음과 같습니다. 완전히 교차 브라우저입니다. 답변

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

감사합니다. 문제는 내 배열의 프로토 타입에 함수 복제본을 추가해야한다는 것입니다. 그리고 배열 자체를 푸시하려고하면이 함수 클론이 추가됩니다. 그래서 나는 이와 비슷한 것을 얻습니다. '[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"] 
//