for循环i问题

for循环外有一个数组,for循环内一个对象,每次for循环都让对象的一个属性值等于数组的对应i项然后在将这个对象push进空数组,为什么空数组后面展示出来的全一样的,我用字执行函数把for内包住也不行

阅读 3.4k
5 个回答

你说的新数组的后面都一样,是指的是数组里面元素都一样吗?应该是作用域问题,利用闭包应该能解决。

你把循环体的那个对象push进空数组是在循环体内进行还是结束后 你所说的空数组里面的内容不是这个对象吗?

let obj={a:1};
let arr = [{a:1},{a:2},{a:3},{a:1,b:1}];
let arr2 =[];
for(let o of arr){
    if(o.a == obj.a){
        arr2.push(o);
    }
}
console.log(arr2);//arr2=[{a:1},{a:1,b:1}]

我猜楼主描述的功能应该是这样。这没有闭包问题。楼主可以把代码贴出来吗?

我以前也遇到这种类型的问题,在将一个集合循环到的项push到一个数组中,最后发现数组里面的项都是一样的,原因不是很清楚,解决方法是先将循环到的项copy,然后在将这个copy得到的值push到数组中;

//此处只是随意举个例子
var a=[1,2,3,4,5,6];
var b=[];
for(let o of a)
{
    b.push(o.clone());
}
推荐问题