Javascript中的引用数组与值数组
Array by Reference vs Array by Value in Javascript
我正在阅读O'reily的Data Structures and Algorithms with 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
为什么需要一个函数来创建深度拷贝?
如评论中所述,该函数纯粹是为了美观和可重用性,并不是严格必要的。
你可以重构你的例子:
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
相关文章:
- JavaScript变量引用数组时出现问题
- 如何创建以下数组的克隆而不是引用
- 将数组从 Spring bean 转换为 JSON 以在 JSP 中引用
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- 在 Larawel 中存储引用数组
- 通过动态创建数组名称在单击函数中引用 javascript 数组
- 我需要引用使用 .get() 创建的数组
- 引用函数数组中的另一个函数
- 数组和反向引用
- 如何通过向用户推送模式引用来更新用户对象's数组字段
- 按数组引用 JavaScript 对象
- 在循环中创建的函数中使用时出现数组引用问题
- 数组引用:将对象添加到对象数组中
- Javascript中的数组引用
- Mongodb/Mongoose:填充ObjectId数组(引用)
- Javascript函数不修改数组(引用?)
- 为什么我不能在JavaScript中连接数组引用?
- 如何从数组引用TypeScript类中的此父方法's ForEach循环
- 在 JavaScript 和 ActionScript 之间共享数组引用
- 为什么数组引用号转换为STRING