js如何删除一个数组中重复的所有对象?

js删除一个数组中重复的所有对象(不是去重)

思路如下:

1、首先把原始数组赋值给一个新数组newArr,然后循环两个数组,当属性值完全相同时,记录count计数器的大小;
2、判断count是否大于1,大于1说明重复;
3、删除重复对象,索引集合为indexArr,记得每次删除,索引减一,因为每次删除,newArr数组都会改变

代码如下:
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>删除同一个数组中所有的相同对象(不是去重)</title>
 </head>
 <body>
 </body>
 <script type="text/javascript">
  let arr = [{
    name: "张三",
    id: "1"
   },
   {
    name: "李四",
    id: "2"
   },
   {
    name: "李四",
    id: "2"
   },
   {
    name: "小兰",
    id: "3"
   },
   {
    name: "张三",
    id: "1"
   },
   {
    name: "张三",
    id: "1"
   }
  ]

  let list = fun(arr);
  console.log(list, "结果")

  function fun(arr) {
   let newArr = [...arr];
   let indexArr = [];
   arr.forEach((s, i) => {
    let count = 0;
    newArr.forEach((m, j) => {
     if (arr[i].name == newArr[j].name && arr[i].id == newArr[j].id) { //当属性值都相同时,打印索引位置
      count++;
     }
    })
    // console.log("索引:",i,"相同次数:",count)
    if (count > 1) { //内层循环结束,当count>1,说明此索引为对象是重复的
     indexArr.push(i);
    }
   })
   // console.log(indexArr) //相同对象索引数组
   let flag = -1;
   for (var i = 0; i < indexArr.length; i++) { //删除一次,索引位
    flag++;
    if (flag == 0) {
     newArr.splice(indexArr[i], 1);
    } else {
     newArr.splice(indexArr[i] - flag, 1); // 每次删除,需要删除的索引位就要减去1
    }
   }
   return newArr;
  }
 </script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值