代码之家  ›  专栏  ›  技术社区  ›  yavg

在javascript中foreach执行时删除元素的最佳方法是什么?

  •  0
  • yavg  · 技术社区  · 4 年前

    let aUsers=[{"name":"goku"},{"name":"cell"},{"name":"vegeta"},{"name":"freezer"}]
    
    aUsers.forEach((user,i)=>{
      if(user.name=="cell" || user.name=="freezer"){
        aUsers.splice(i,1); //this causes a problem..
      }
    })
    
    console.log(aUsers);

    我知道我应该使用 filter ,但我不知道如何让我的元素 removed array 同时我的 foreach 跑。

    我会知道如何解决这个问题,但在运行后 foreach ,也许有更好的方法。

    我该怎么做?

    1 回复  |  直到 4 年前
        1
  •  3
  •   CertainPerformance    4 年前

    是的,你应该使用 filter 而不是 forEach :

    let aUsers=[{"name":"goku"},{"name":"cell"},{"name":"vegeta"},{"name":"freezer"}]
    
    const newUsers = aUsers.filter(user => user.name !== "cell" && user.name !== "freezer");
    
    console.log(newUsers);

    如果必须就地更改数组,则向后迭代:

    let aUsers=[{"name":"goku"},{"name":"cell"},{"name":"vegeta"},{"name":"freezer"}]
    
    for (let i = aUsers.length - 1; i >= 0; i--) {
      if (['cell', 'freezer'].includes(aUsers[i].name)) {
        aUsers.splice(i, 1);
      }
    }
    
    console.log(aUsers);