js 两个数组,元素都是对象,如何去除交集?

一个table里面一堆数据,当然都是对象了。当我选中某些行时会把这些被选中的数据添加到一个新数组中,但是我并不知道这些数据在原数组中的下标,这时我点击删除按钮时应该需要把原数组中包含被选中的数据都给删掉,我想到了for循环嵌套,但是这并不是一个很优美的写法,想请教诸位大神有没有更骚气又更牛逼的写法呢?
多谢指教!

阅读 4.6k
4 个回答

我给一个参考意见吧,不是放到两个数组中的。。。

记录加上标志位,被删除的不显示。如果要进行数据提交的话,可以过滤到删除的。

let arr = [
  { name: 'name-1', record_id: 1, is_deleted: 0 },
  { name: 'name-2', record_id: 2, is_deleted: 0 },
  { name: 'name-3', record_id: 3, is_deleted: 1 }
];

不知道你的对象里面有没有唯一值,有你可以尝试一下使用数组的filter方法过滤

考虑下渲染table的那个数组,看看能不能按顺序渲染,就是按数组的下标去渲染,这样你选择table的时候,只要知道对应的index,不管是取数据还是删除数据都很简单了,取就是arr[index],删就是arr.splice(index, 1).

var arr = [
    { name: 'name-1', record_id: 1, is_deleted: 0 },
    { name: 'name-2', record_id: 2, is_deleted: 0 },
    { name: 'name-3', record_id: 3, is_deleted: 1 }
];
var add=[{ name: 'name-3', record_id: 3, is_deleted: 1 }];

function sd(a,b){
    let j=b[0];
    a.forEach((element,index) => {
       if(JSON.stringify(element)==JSON.stringify(j)){
           a.splice(index,1);
       }
    });
    console.log(a)
    return a;
}
sd(arr,add);
推荐问题