【发布时间】: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