Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript If语句中的嵌套For of循环只保留最后一个值_Javascript_Angular_Ecmascript 6_Closures_Nested Loops - Fatal编程技术网

Javascript If语句中的嵌套For of循环只保留最后一个值

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

我在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这个词可以解决这个结束问题。我在这里遗漏了什么?

你不是在推送一个新对象,而是在推送使用
对象时对同一对象的另一个引用,然后对该对象进行变异。分配({},elem)
来创建一个新对象。

你能共享
someArr
数据吗?你能在数组中添加详细信息吗?它是什么类型的数组?我在这里没有看到闭包,在
for
循环中,您每次都会修改相同的
元素
引用,因此您感觉最后一个值被推了。制作对象的副本,修改并推送该副本,而不是复制。您是否在数组中看到“最后一个元素”的多个副本?如果是这样,那是因为您正在重新分配
elem
的属性,因此每次重新分配都会更改对它的所有引用。这并不是那么简单。是的,他/她在内部for循环中做了一些可疑的事情,但是外部for循环仍然在不同元素的数组中循环,所以这可能不是原因。啊,是的,这是有意义的。谢谢@Colbyother sintax正在使用扩展运算符:this.tempArray.push({…element})