Javascript中的引用数组和数组中的数组

时间:2015-08-28 00:48:19

标签: javascript arrays oop object

我正在阅读O'reily使用Javascript进行数据结构和算法,并说明如下:

浅拷贝(两个数组指向内存中的相同位置):

var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
}
var samenums = nums;
nums[0] = 400;
print(samenums[0]); // displays 400

深拷贝:

function copy(arr1, arr2) {
for (var i = 0; i < arr1.length; ++i) {
arr2[i] = arr1[i];
}
}

现在,以下代码片段产生预期结果:

var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
}
var samenums = [];
copy(nums, samenums);
nums[0] = 400;
print(samenums[0]); // displays 1

为什么需要一个功能才能创建深层副本?

1 个答案:

答案 0 :(得分:1)

正如评论中所述,该功能纯粹是为了美观和可重用,并非绝对必要。

你可以重构你的例子:

function copy(arr1, arr2) {
    for (var i = 0; i < arr1.length; ++i) {
        arr2[i] = arr1[i];
    }
}

var nums = [];
for (var i = 0; i < 100; ++i) {
    nums[i] = i+1;
}
var samenums = [];
copy(nums, samenums);
nums[0] = 400;
print(samenums[0]); // displays 1

进入这个等效的无功能示例:

var nums = [];
for (var i = 0; i < 100; ++i) {
    nums[i] = i+1;
}
var samenums = [];
for (var i = 0; i < nums.length; ++i) {
    samenums[i] = nums[i];
}
nums[0] = 400;
print(samenums[0]); // displays 1