【发布时间】:2019-10-10 04:44:12
【问题描述】:
我正在尝试执行一个循环并使用每个循环值更新一个对象属性,但发生了一些意想不到的事情:
第一个console.log 打印按预期更新的day 对象属性。然而,第二个打印完整对象,显示 day 属性,其值为 final forEach 值。
示例:
data.days = [ 5, 6 ]
第一个循环打印:
newData.date: 5
{prop1: x, prop2: x...., date: 6}
第二次循环打印:
newData.date: 6
{prop1: x, prop2: x...., date: 6}
这是我的代码:
data.days.forEach(day => {
let newData;
newData = data.data;
newData.date = day;
console.log('newData.date: ' + newData.date)
console.log(newData)
})
我尝试用forEach 或for 循环创建newData 变量,但结果相同。
【问题讨论】:
-
data.days = { 5, 6 }语法无效 -
正如 Maheer Ali 告诉你的那样:forEach 适用于数组,而 data.days 是 ...
-
newData = data.data是通过引用复制的,您实际上是在每个循环上分配相同的对象。这就是为什么你总是在最终循环中得到 last value... -
data.days 被声明为一个空数组,并且在调用循环之前根据我的需要推送或拼接这些值。事实上,正如您在第一个 console.log 中看到的那样,它在每个循环中打印正确的值
标签: javascript loops foreach