JavaScript - 在数组内部克隆数组

8

我有一个数组["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();

我这样做对了吗?也许有更好或更短的方法克隆元素吗?

5个回答

11

您只需要使用concat()函数,因为它会创建一个新的数组:

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

5
const arr = [0, 1, 2]
const combinedOne = [ ...arr, ...arr]

有了es6,我们可以使用展开运算符。


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"]
//

我晚了几年,但还是感谢你的回答。然而,需要注意的是,修改原生JS类的原型通常是不好的做法。此外,请注意OP对Joon答案的评论,其中解释了类似方法可能会导致另一个属性被包含在最终结果中。 - Vessel

0
或者,你也可以这样写concat方法:

let arrayA = [0, 1, 2];
arr = [].concat(arr, arr);
console.log(arr);


-1

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

以下是如何在不创建新数组的情况下保留旧数组引用,并且完全跨浏览器兼容。

arr.push.apply(arr, arr);

谢谢回答。我的任务是向数组原型添加克隆函数。但当我试图将数组推入自身时,此克隆函数也被添加了。因此,我得到了类似这样的东西:[0, 1, 2, 0, 1, 2, foo: function] - Alexandra Vorobyova

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接