gpt4 book ai didi

javascript - Electron 错误console.log值

转载 作者:行者123 更新时间:2023-12-03 12:33:06 24 4
gpt4 key购买 nike

我在Electron应用程序的console.log上有一些奇怪的东西,所以基本上它与 Chrome 相同,对吗?
这是我的代码

let arr = [{
actual_mix_class: 12,
batch_id: "23498235025013",
date: 1595416034349,
days: [7, 7, 7, 14, 15, 28]
}]

let homeData = []

for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].days.length; j++) {
homeData[homeData.length] = arr[i]
console.log(arr[i].days[j])
homeData[homeData.length - 1].test_day = arr[i].days[j]
console.log(homeData[homeData.length - 1])
console.log(homeData[homeData.length - 1].test_day)
}
}
我试图将days属性分离为在对象内部具有整个数据的新数组。
当我在 test_day 上执行console.log时,显示的内容不正确
enter image description here
直到我扩展console.log,然后显示 28 ,它才正确显示为 14 ,并且所有 test_day 都具有相同的值 28
然后最后我在过程完成后最后做控制台
homeData.forEach(e => {
console.log(e.test_day)
})
它说 28 六次。
我在哪里做错了?请帮忙,谢谢高级。

最佳答案

问题是当您执行homeData[homeData.length] = arr[i]时,实际上是在将原始arr[i]的引用分配给homeData[homeData.length]
然后,当您执行homeData[homeData.length - 1].test_day = arr[i].days[j]时,您再次将对上述对象的内部属性的引用分配给同一对象的另一个字段,使其成为循环引用。
您可以做的是使用spread syntax制作arr[i]的副本,然后将其分配给homeData[homeData.length],如下所示。

homeData[homeData.length] = {...arr[i]};
如果您不使用ES6,则可以使用 Object.assign() ,如下所示。
Object.assign(newObj, arr[i]);
homeData[homeData.length] = newObj;

关于javascript - Electron 错误console.log值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63066725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com