双层循环嵌套怎么优化

` list1 = [{

    id:1,
    name:'a'
},{
    id:2,
    name:'b'
},{
    id:3,
    name:'c'
},{
    id:4,
    name:'d'
},{
    id:5,
    name:'e'
},{
    id:6,
    name:'f'
}],
list2 = [{
    name:'1_a'
},{
    name:'1_b'
},{
    name:'1_d'
},{
    name:'1_e'
},{
    name:'1_f'
}]`

`let arr = []
for(let i of list1) {
    i.namelist = []
    for(let j of list2) {
    //如果j.name包含i.name ,就把j.name赋值给i.namelist
      if(j.name.includes(i.name)) {
        i.namelist = [j.name]
      }
    }
    arr.push(i)
}`

数据过多时,就会出现有的数据无法赋值到i.namelist,而且循环次数就会变多,导致页面加载缓慢,请问有什么优化方法
阅读 5.5k
4 个回答

namelist里面的内容唯一吗?如果唯一的话可能会稍微好办一点。

页面加载慢,那么存的时候就先判断了再存, 把i存到j里,或者j存到i里,
这样下次拿到数据就不用组装了。

你是要list1的每一项和list2的对应项比较,还是list1每一项与list2的每一项都依次比较一次?

我的想法是,把name作为key,然后循环遍历的数组就变得简单点

const patch = (arr1, arr2) => {
  //add key
  let obj = {};
  arr2.forEach(item => {
    obj[item.name] = item;
  });
  //patch
  Object.keys(obj).forEach(key => {
    arr1.forEach(item => {
      if (key.includes(item.name)) {
        item.namelist = [key];
      }
    });
  });
  return arr1;
};

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