一个对象组成的数组中删除另一个数组存在的对象

由对象组成的数组 对照删除
一个表格,类似于下图,选中以后,做成纯前端批量删除

在这里插入图片描述

arr2是全部的数据,arr1是勾选的数据
let arr1 = [
    { code: "123456781",color: "芭比粉"},
    { code: "123456783",color: "芭比粉"},
    { code: "123456785",color: "芭比粉"}
 ]
let arr2 = [
    { code: "123456781",color: "芭比粉"},
    { code: "123456782",color: "芭比粉"},
    { code: "123456783",color: "芭比粉"},
    { code: "123456784",color: "芭比粉"},
    { code: "123456785",color: "芭比粉"},
    { code: "123456786",color: "芭比粉"}
 ]




简单写法
        /*
        *         every方法,只要有一项不满足条件就返回false,也就是说必须每一项都得满足才能返回true。返回的是布尔值。
        *         filter方法,只要条件满足,我就将此元素返回出去,返回的是元素。
        *       在本示例中,只要arr1中存在与arr2中相同的元素,我就返回false。也就是说,我拿着arr2中
        *  的第一项去和arr1中的每一项去比较,如果code都不相等,满足所有条件,我就返回true。
        *       在filter中,只要条件为true,我就将这一项返回出去,就实现了批量删除的效果。
        */
 let arr3 = arr2.filter(item=>{
    return arr1.every(item2=>{
      return item.code != item2.code;
    })
 })
        
 console.log(arr1,'arr1');
 console.log(arr2,'arr2');
 console.log(arr3,'arr3');

 

for循环写法,因为arr2会改变,所以采用倒序的方法,也可以重新定义一个变量,来保存arr2,不过得是深拷贝才好。
for(let i = arr2.length - 1; i >= 0; i--){
  for(let j = 0; j < arr1.length;j++){
    if(arr2[i].code == arr1[j].code){
      arr2.splice(i,1);
    }
   }
 }
 console.log(arr1,'arr1');
 console.log(arr2,'arr2');


总结
一个是考察 every 和 filter 的用法,every 是必须所有项都满足条件才返回true,返回的是布尔值,filter 是返回满足条件的元素,返回的是元素。顺便说一下 some ,他和 every 相反,只要有一个满足条件,就返回true。另一个是for循环和深拷贝或浅拷贝的问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值