【问题标题】:Objects attribute value is different at end of for-loop vs after loop对象属性值在 for 循环结束时与循环后不同
【发布时间】:2020-11-05 15:47:55
【问题描述】:

我想为name 中的每个名称添加一个带有特定label 的defaultName 到allNameObject 的“数据集”数组中。
相反,我将最后一个循环的“名称”(“Name_5”)作为每个 defaultNamelabel
我正在为 Chart.js 创建对象,因此无法更改。
我已经阅读了“循环参考”,但我找不到是否是这样或如何解决它。

var allNameObject = { data: { datasets: [] } }
var defaultName = { label: '' }
var names = ["Name_0", "Name_1", "Name_2", "Name_3", "Name_4", "Name_5"]

for (var i = 0; i < names.length; i++) {
  allNameObject.data.datasets.push(defaultName)
  allNameObject.data.datasets[i].label = names[i]

  console.log(allNameObject.data.datasets[i].label)
  // this correctly outputs "Name_i"
}

console.log(allNameObject.data.datasets[0].label)
// wanted output: "Name_0" || actual output: "Name_5"
console.log(allNameObject.data.datasets[1].label)
// wanted output: "Name_1" || actual output: "Name_5"
console.log(allNameObject.data.datasets[2].label)
// wanted output: "Name_2" || actual output: "Name_5"
console.log(allNameObject.data.datasets[3].label)
// wanted output: "Name_3" || actual output: "Name_5"
console.log(allNameObject.data.datasets[4].label)
// wanted output: "Name_4" || actual output: "Name_5"
console.log(allNameObject.data.datasets[5].label)
// wanted output: "Name_5" || actual output: "Name_5"

【问题讨论】:

  • 您每次都添加相同的对象defaultName。所以,任何时候你改变它,它都会随处改变。在循环内移动var defaultName = { label: '' } 行以创建单独的不同对象。
  • 啊啊啊啊!当然!非常感谢@VLAZ!

标签: javascript arrays for-loop object


【解决方案1】:

已由 cmets 中的 VLAZ 解决。
每次都更改相同的对象 (defaultName.label)。因为我没有创建新对象,所以每次都是同一个对象覆盖标签。

您每次都添加相同的对象 defaultName。所以,任何时候你 改变它,它无处不在。移动行 var defaultName = { label: '' } 在循环内创建单独的不同对象。 – VLAZ

var allNameObject = { data: { datasets: [] } }
var names = ["Name_0", "Name_1", "Name_2", "Name_3", "Name_4", "Name_5"]

for (var i = 0; i < names.length; i++) {
  var defaultName = { label: '' }
  allNameObject.data.datasets.push(defaultName)
  allNameObject.data.datasets[i].label = names[i]

  console.log(allNameObject.data.datasets[i].label)
  // this correctly outputs "Name_i"
}

console.log(allNameObject.data.datasets[0].label)
// wanted output: "Name_0" || actual output: "Name_5"
console.log(allNameObject.data.datasets[1].label)
// wanted output: "Name_1" || actual output: "Name_5"
console.log(allNameObject.data.datasets[2].label)
// wanted output: "Name_2" || actual output: "Name_5"
console.log(allNameObject.data.datasets[3].label)
// wanted output: "Name_3" || actual output: "Name_5"
console.log(allNameObject.data.datasets[4].label)
// wanted output: "Name_4" || actual output: "Name_5"
console.log(allNameObject.data.datasets[5].label)
// wanted output: "Name_5" || actual output: "Name_5"

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2015-08-08
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    相关资源
    最近更新 更多