【问题标题】:Nested For of Loop Inside If Statement Only retains last valueIf 语句内的嵌套 For of Loop 仅保留最后一个值
【发布时间】:2018-11-30 17:03:53
【问题描述】:

我在 Angular 服务中的嵌套 for 循环遇到了最奇怪的问题。我有一个服务,我正在运行下面的forEach 函数,数据从服务返回。

someArr.forEach(elem => {
 //do something with elem
    if(elem['users'].length >= 1) {
      for (let user of elem['users']) {
        console.log('>>> ', user['firstName'])
        elem['userFirstName'] = user['firstName'];
        elem['userLastName'] = user['lastName'];
        this.tempArr.push(elem);
      }
    } else {
       this.tempArr.push(elem);
    }
  })

console.log 正在从内部 for 循环中注销正确的名字和姓氏,但只有最后一个值被推送到 tempArr。我认为使用 let 词可以解决这个关闭问题。我在这里错过了什么?

【问题讨论】:

  • 你能分享someArr的数据吗?
  • 您可以添加有关阵列的详细信息吗?是什么样的数组?
  • 我在这里看不到闭包,在for 循环内,您每次都将修改相同的elem 引用,因此您觉得最后一个值被推送。复制您的对象,修改并推送该副本
  • 您是否在数组中看到“最后一个元素”的多个副本?如果是这样,那是因为您正在重新分配 elem 的属性,因此每次重新分配都会更改对它的所有引用。
  • 没那么简单。是的,他/她在内部 for 循环内部做了一些可疑的事情,但外部循环仍在循环不同元素的数组,所以这可能不是原因。

标签: javascript angular ecmascript-6 closures nested-loops


【解决方案1】:

当您推送时使用 Object.assign({}, elem) 创建一个新对象,您推送的不是新对象,只是对您随后变异的同一对象的另一个引用。

【讨论】:

  • 啊,是的,这是有道理的。谢谢@Colby
  • 其他 sintax 正在使用扩展运算符:this.tempArray.push({...element})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 2021-03-21
  • 2017-07-17
  • 2018-08-19
相关资源
最近更新 更多