forEach循环下,把对象插入数组出问题?

我想获得这样的数组

             [
              {'id':1,'array':[2,3,4,5,6,7,8,9]},
              {'id':2,'array':[3,4,5,6,7,8,9]},
              {'id':3,'array':[4,5,6,7,8,9]},
              ]

我写的代码出问题了,怎么回事?

                let arra = [0,1,2,3,4,5,6,7,8,9];
                let arrb = [1,2,3];
                let tempArr=[],object1={};
                arrb.forEach((item,index)=>{
                       let v = arra.filter((x)=>{return x>item;});
                       object1['id']=index;
                       object1['array'] = v;
                       tempArr.push(object1);
                });
                console.log(tempArr);
阅读 2.2k
3 个回答

object1是对象,对象是引用类型,你在forEach循环外定义了,每次赋值都改变了你上一次的上一次赋值;索引是从0开始的,你最后的id循环出来肯定不是1,2,3;将object1定义在循环里面,index + 1;就能得到你的结果。如下:
let arra = [0,1,2,3,4,5,6,7,8,9];
let arrb = [1,2,3];
let tempArr=[];
arrb.forEach((item,index)=>{
let object1 = {}
let v = arra.filter((x)=>{return x>item;});
object1['id']= index + 1;
object1['array'] = v;
tempArr.push(object1);
});
console.log(tempArr);

object1.array的指针指向同一个,所以改一个之前push的也会变。你把object1的作用域放到foreach里面就行了

let arra = [0,1,2,3,4,5,6,7,8,9];
                let arrb = [1,2,3];
                let tempArr=[];
                arrb.forEach((item,index)=>{
                       let object1={};
                       let v = arra.filter((x)=>{return x>item;});
                       object1['id']=index;
                       object1['array'] = v;
                       tempArr.push(object1);
                });
                console.log(tempArr);

在你的代码上稍微调整了一下,相信你应该发现问题在哪儿了,ps:index应该要+1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题