使用push()将一个数组复制到另一个数组

时间:2018-08-20 14:27:37

标签: javascript arrays

假设我具有这样的功能

function createMultiDimArray() {
    let results = [];
    let current = [];

    for (let i = 1; i <= 10; i++) {
        current.push(i);

        if (i % 2 === 0) {
            results.push(current);
            current = [];
        }
    }

    return results;
}

执行时

let arr = createMultiDimArray();

arr看起来像这样

[[1,2][3,4][5,6][7,8][9,10]]

我已经在多种浏览器中对其进行了测试,并且似乎可以使用。因此,显然push()正在创建传递给它的数组的副本,而不仅仅是使用引用,因为否则arr看起来会像这样(当函数结束时为current === [])

[[],[],[],[],[]]

我已经搜索了Internet,但是没有发现关于push()这种行为的任何信息。所以我的问题是:使用push()将一个数组复制到另一个数组是否安全?

2 个答案:

答案 0 :(得分:4)

push不会复制数组(或给出的任何参数)。

相反,线

current = [];

创建一个新的数组对象,并将其分配给数组引用current。根据您的分析,我想您假设它会清空current所引用的现有数组对象,但事实并非如此。

答案 1 :(得分:0)

否,在代码中,您使用results.push(current);将值压入结果,然后使用current创建新的current = [];数组。因此,在每个偶数之后,您都会得到一组放入results中的数字。