javascript - 无法在 forEach 中分配正确的数组值
问题描述
我最近遇到了一个奇怪的(对我来说)行为。
let test = [
{ id: 1, name: 'test1' },
{ id: 2, name: 'test2' },
{ id: 3, name: 'test3' }
]
let test2 = []
test.forEach((elem, index) => {
console.warn(elem, index);
test2.push(elem.name)
elem.arr = test2
})
console.warn(test);
我希望预期的结果是这样的
[ { id: 1, name: 'test1', arr: [ 'test1'] },
{ id: 2, name: 'test2', arr: [ 'test1', 'test2'] },
{ id: 3, name: 'test3', arr: [ 'test1', 'test2', 'test3' ] }]
但我明白了
[ { id: 1, name: 'test1', arr: [ 'test1', 'test2', 'test3'] },
{ id: 2, name: 'test2', arr: [ 'test1', 'test2', 'test3'] },
{ id: 3, name: 'test3', arr: [ 'test1', 'test2', 'test3'] }]
有人能解释一下为什么会发生这种情况(可能是关于参考的事情吗?)和解决方案?
解决方案
只有一个数组,连续三次test2
(通过 )属性引用。arr
所有这些条目都指向一个数组。
您可能想复制一份:
elem.arr = [...test2]
let test = [
{ id: 1, name: 'test1' },
{ id: 2, name: 'test2' },
{ id: 3, name: 'test3' }
]
let test2 = []
test.forEach((elem, index) => {
//console.log(elem, index);
test2.push(elem.name)
elem.arr = [...test2]
})
console.log(JSON.stringify(test, null, 2));
推荐阅读
- build - 无法在命令提示符下为虚幻引擎构建插件
- javascript - 如何重定向到带有授权标头的 URL?
- python - 查找字符串中的连续字符+它们的开始和结束索引(python)
- syntax - 这种语法描述语言描述了什么?它有名称或标准吗?
- xml - 删除 xmlns: 属性
- reactjs - 如何在反应 redux 钩子中为多个参数设置状态
- java - 微服务通信问题
- reactjs - 有什么方法可以在反应中重用节点模块吗?
- visual-studio-code - Visual Studio Code Jupyter 不显示亚洲语言字符
- flutter - 图像选择器在颤振项目中不起作用