【问题标题】:cannot set property of undefined in a loop无法在循环中设置未定义的属性
【发布时间】:2019-03-22 10:14:22
【问题描述】:

我正在循环生成对象数组。我已经使用 faker 来生成假名,但在指定的迭代中我想插入我自己的值,在这种情况下是人的车。 下面的代码我无法设置未定义的汽车属性,这是怎么回事?

const person = []
times(2, index => {
  if (index === 0) {
    person[0].car = 'honda'
  } else if(index ===1) {
    person[1].car = 'ford'
  }

  person.push({
    name: faker.random.name()
  })
}
console.log(person)

【问题讨论】:

  • 你需要在分配给它之前创建一个对象:person[0]={} 并且它可能不是一个 const 并且是 faker.random.name 一个返回对象的函数吗?
  • if (index === 0) person[0]......?!那应该只是person[index]...
  • 使用 const person = Array(2).fill({})
  • 你应该在assigning identifiers阅读这篇文章
  • @mplungjan 人是一个数组

标签: javascript ecmascript-6


【解决方案1】:

除了缺少一些右括号外,您尝试先访问一个不存在的对象 (person[0].car...),然后再创建它 (person.push(...))。

颠倒顺序。

let newPerson = { name: faker.random.name(), car: 'dodge' };
person.push(newPerson);

【讨论】:

  • 同理。只有你重复“newPerson =...; person.push(newPerson);”根据需要多次,可以在循环内。
【解决方案2】:

person 最初是一个空数组,其中没有对象,因此当尝试执行person[0].car 时会引发错误,因为person[0]undefined,并且您无法从@987654325 设置或获取任何属性@。

改为这样做

person[0] = {}
person.car = 'honda'

person[0] = {'car': 'honda'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 2022-10-30
    • 2023-02-10
    • 2015-12-07
    • 2013-05-28
    • 2016-02-23
    • 2011-11-20
    相关资源
    最近更新 更多