Javascript If语句中的嵌套For of循环只保留最后一个值
我在Angular服务中的嵌套for循环中遇到了最奇怪的问题。我有一个服务,我正在运行下面的Javascript If语句中的嵌套For of循环只保留最后一个值,javascript,angular,ecmascript-6,closures,nested-loops,Javascript,Angular,Ecmascript 6,Closures,Nested Loops,我在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
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这个词可以解决这个结束问题。我在这里遗漏了什么?你不是在推送一个新对象,而是在推送使用对象时对同一对象的另一个引用,然后对该对象进行变异。分配({},elem)
来创建一个新对象。你能共享someArr
数据吗?你能在数组中添加详细信息吗?它是什么类型的数组?我在这里没有看到闭包,在for
循环中,您每次都会修改相同的元素
引用,因此您感觉最后一个值被推了。制作对象的副本,修改并推送该副本,而不是复制。您是否在数组中看到“最后一个元素”的多个副本?如果是这样,那是因为您正在重新分配elem
的属性,因此每次重新分配都会更改对它的所有引用。这并不是那么简单。是的,他/她在内部for循环中做了一些可疑的事情,但是外部for循环仍然在不同元素的数组中循环,所以这可能不是原因。啊,是的,这是有意义的。谢谢@Colbyother sintax正在使用扩展运算符:this.tempArray.push({…element})