js 根据ids【数组】前台批量删除数组对应id元素

KenOscar
  • 860

给定一个id的数组集合ids 结构类似
["1","2","3"]
table的数组data机构类似

[
  {
      id:"2",
      name:"xx"
    },
{
      id:"1",
      name:"xx"
    },
]

要求吧data里对应 ids里面的id的数据删掉

 for (let j = 0; j < this.data.length; j++) {
          for (let i = 0; i < this.ids.length; i++) {
            if (this.ids[i] === this.data[j].id) {
              this.data.splice(i, 1);
            }
          }
        }

这样写 貌似只能一个一个删除,怎么才能批量删除?

回复
阅读 1.1k
4 个回答

可以用 filter 排除。
注意 includes 要类型相同

let data = [
  {
      id:"2",
      name:"xx"
    },
{
      id:"1",
      name:"xx"
    },
];
let ids = ["1","2","3"];
let res = data.filter(item=>!ids.includes(item.id))

把你的外层遍历顺序改成从后向前遍历试试呢?
遍历过程中增删数组元素会影响后面的元素位置。

function removeItemsById(list, ids) {
  const idSet = new Set(ids)

  return list.filter(item => !idSet.has(item.id))
}

如果这个 ids 或者 list 比较大的时候,应该用 ids 创建 Set 对象后再遍历过滤。

function remove(source, target) {
    for (var i = source.length; i--;) {
        for (var j = 0; j < target.length; ++j) {
            if (source[i].id === target[j]) {
                source.splice(i, 1);
            }
        }
    }
    return source;
}
console.dir(remove(this.data, this.ids));
宣传栏