电子怪 console.log 值

Electron wierd console.log value

我在 Electron 应用程序的 console.log 上有一些奇怪的东西,所以基本上它和 chromium 一样对吧?

这是我的代码

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)
  }
}

我试图将天 属性 分成新的数组,在对象中包含完整的数据。

当我在 test_day 上执行 console.log 时,显示的内容不正确

它显示正确它是 14 直到我展开 console.log 然后显示 28,所有 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;