JS中删除数组中重复的元素

1.使用splice()

  1. splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组
  2. 第一个参数表示要删除的位置(从0计数),第二个参数表示要移除的数组元素的个数
		var aa = [4, 5, 6, 23, 33, 44, 55]
        console.log(aa);

        aa.splice(5,1)//删除下标为5开始的元素,并删除一个
        console.log(aa);
  • 打印结果
    在这里插入图片描述

应用: 去掉一个数组的重复元素['c', 'a', 'z', 'a', 'x', 'a', 'c', 'c' , 'a', 'c']
  • 下面这种方法 对于重复数据很多的时候、有些数据并没有去重。
<script>
function repeat(arr) {

            for (var i = 0; i < arr.length; i++) {
                for (var j = i + 1; j < arr.length; j++) {//第一次是拿第一个数据和剩余的n-1个数据判断是否相等、第二次是拿第二个数据和剩余的n-1个数据相比
                    if (arr[i] == arr[j]) {

                        var del = j;

                        arr.splice(del, 1);//找到了该数据的下标就删除了
                    }
                }
            }
            return arr;
        }
        
        var arr = ['c', 'a', 'z', 'a', 'x', 'a', 'c'];
        console.log(repeat(arr));
 </script>

会发现c 存在两个
在这里插入图片描述

  • 新方法
function repeat(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length;) {//第一次是拿第一个数据和剩余的n-1个数据判断是否相等、第二次是拿第二个数据和剩余的n-1个数据相比
      if (arr[i] === arr[j]) {
        arr.splice(j, 1);//找到了该数据的下标就删除了
        continue // 跳过剩余代码 、进行下一步
      }
      j++
    }
  }
  return arr
}
  • 打印结果
    在这里插入图片描述

2. 使用indexOf()

indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1

 //获取数组元素的下标----没有该元素的时候返回值为-1,有就返回该元素的下标
        var aa = [4, 5, 6, 23, 33, 44, 55]
        console.log(aa);
        console.log(aa.indexOf(222));
        console.log(aa.indexOf(44));
        
 //数组末尾追加元素  666  
		aa.push(666);
        console.log(aa);
  • 打印结果

应用:
<script>
   function repeat1(arr) {
            var temp = [];//建立一个新数组保存删除后的数组
            //遍历数组
            for (var i = 0; i < arr.length; i++) {

                if (temp.indexOf(arr[i]) == -1) {//在新数组中若不存在,该元素则添加到该temp[]数组中

                    temp.push(arr[i])//push()------ 在数组末尾追加元素
                }
            }
            return temp;//返回删除后的数组

        }

        console.log(repeat1(arr));//调用函数并打印结果
  </script>      
  • 打印结果
    在这里插入图片描述

3. 使用Set

  1. Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
  2. Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的
var aa = [1,2,3,3,2,1,4,5,6]
console.log(new Set(aa));

在这里插入图片描述


4. 数组中去除数组

遇到了一个特别的:第一个数组中去除第二个数组中的所有元素。
在这里插入图片描述

        let arr1 = [
            { id: 639, name: "商品管理", type: 0, pId: 638, code: "1" },
            { id: 640, name: "商品分类", type: 0, pId: 639, code: "2" },
            { id: 642, name: "增加分类", type: 0, pId: 640, code: "3" },
            { id: 645, name: "编辑分类", type: 0, pId: 640, code: "4" },
            { id: 646, name: "消息管理", type: 0, pId: 655, code: "4" }
        ]
        let arr2 = [
            { id: 640, name: "商品分类", type: 0, pId: 639, code: "2" },
            { id: 642, name: "增加分类", type: 0, pId: 640, code: "3" },
            { id: 645, name: "编辑分类", type: 0, pId: 640, code: "4" },
        ]
      let res= arr2.map(el=>el.id)//取出一组唯一标识
      
       let finalResult=[]
       arr1.forEach(el=>{
           if(!res.includes(el.id)){
               finalResult.push(el)
           }
       })
       console.log(finalResult,'finalResult');

更简洁的方法使用filter

       let res= arr2.map(el=>el.id)
       let finalResult= arr1.filter(el=>!res.includes(el.id))
       console.log(finalResult,'finalResult');

在这里插入图片描述

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值