Javascript—内部克隆数组

Javascript—内部克隆数组,javascript,arrays,clone,Javascript,Arrays,Clone,我有一个数组[“0”、“1”、“2”],我需要创建一个函数使其成为 ["0", "1","2", "0", "1", "2"]. 我编写了克隆函数: 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; }

我有一个数组[“0”、“1”、“2”],我需要创建一个函数使其成为
["0", "1","2", "0", "1", "2"]. 我编写了克隆函数:

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();
arr=[0,1,2];
arr.clone=函数(){
var b=[];
对于(变量i=0;i
我做得对吗?也许有更好或更短的方法来克隆元素?

您只需自己使用,因为它构建了一个新阵列:

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

如果您的所有目标浏览器都支持
Array.concat
方法,并且您不介意创建一个新的数组,那么Frédéric Hamidi的答案可能是最好的答案

下面介绍了如何在不创建新阵列的情况下保留旧阵列引用,并且完全跨浏览器

arr.push.apply(arr, arr);

对于es6,我们可以使用扩展运算符。

谢谢您的回答。问题是,在我的任务中,我需要将函数克隆添加到阵列的原型中。当我尝试将阵列推入自身时,也添加了这个克隆函数。所以我得到了类似的
[0,1,2,0,1,2,foo:function]
// 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"]
//
const arr = [0, 1, 2]
const combinedOne = [ ...arr, ...arr]