javascript - Javascript - 在while循环中修改两个数组,两个数组都保留第二个值
问题描述
我有一个数组数据,其中包含一个 nodeData 对象,其中包含一个 id
我制作了数组的 2 个副本:
const dropAboveData = data.slice();
const dropBelowData = data.slice();
然后我尝试以不同方式修改我的 2 个复制数组的两个副本
for(let i = 0; i<data.length; i++){
dropAboveData[i].nodeData.id = -1;
dropBelowData[i].nodeData.id = -2;
}
因此,例如,如果数据中的每条记录都有 data[i].nodeData.id = 0,最后我希望 dropAboveData 包含所有 -1 的 id,而 dropBelowData 包含所有的 -2 的 id。
但相反,data、dropAboveData 和 dropBelowData 似乎都变成了用 -2 填充的数组。
为什么会这样?我虽然 slice() 制作了数组的副本,这样我就不会访问同一个对象?
解决方案
Slice做一个浅拷贝
slice() 方法将数组的一部分的浅拷贝返回到从开始到结束(不包括结束)选择的新数组对象中。原始数组不会被修改。
你可以像这样复制一个对象数组:
var data = [{
'a': '0'
}, {
'b': '1'
}, {
'c': '2'
}]
dropAboveData = []
dropBelowData = []
data.map(o => {
dropAboveData.push(JSON.parse(JSON.stringify(o)));
dropBelowData.push(JSON.parse(JSON.stringify(o)));
});
dropAboveData[0] = 1; //<-- modify only dropAboveData
dropAboveData[1].b = 99;//<-- modify only dropAboveData
console.log(dropAboveData)
console.log(dropBelowData)
推荐阅读
- python - 将 JSON 文件加载到字典中,而不是字符串或列表
- java - Python 进程 IOException:流已关闭
- python - 那些keras的损失和准确性很奇怪吗?
- java - 使用“for”循环打印堆栈
- php - 无效的 SQL 语法。试图运行 php 到 mysql
- android - 将类注入服务
- html - 浮动 div 右而不允许 div 之后向上移动?
- java - 带有正文消息的放心状态代码验证
- node.js - Node.js - 返回 res.status VS res.status
- ruby-on-rails - devise_token_auth 如何访问 user.created_at