前端数组对象去重的几种方法,拿来即用

工作中有许多地方地方需要前端处理数据,总结了几种数据去重的方法都实验过,可以使用

  初始数据 id有相同的需要去重
  let person = [
         { id: 0, name: "小明" },
         { id: 1, name: "小张" },
         { id: 2, name: "小李" },
         { id: 3, name: "小孙" },
         { id: 1, name: "小周" },
         { id: 2, name: "小陈" },
      ];
 
      // 第一种使用去重reduce
      
      let obj = {};
      let peon = person.reduce((cur, next) => {
         obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
         return cur;
      }, []) //设置cur默认类型为数组,并且初始值为空的数组
      console.log(peon);
      
      // 第二种种使用reduceRight去重
      //  reduceRight和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的   数组项做累加。
      
      let hash = {};
      const newArr = person.reduceRight((item, next) => {
         hash[next.id] ? '' : hash[next.id] = true && item.push(next);
         return item
      }, []);
      console.log(newArr);
      
      // 第三种   for循环 利用对象访问属性的方法,判断对象中是否存在重复的key
      // 一
      var result = [];
      var obj = {};
      for (var i = 0; i < person.length; i++) {
         if (!obj[person[i].id]) {
            result.push(person[i]);
            obj[person[i].id] = true;
         }
      }
    
      for (var i = 0; i < person.length; i++) {
         for (var j = i + 1; j < person.length; j++) {
            if (person[i].id == person[j].id) {
               person.splice(j, 1);
            }
         }
      }
      console.log(person);
      
      // 第三种 封装成方法 使用for循环 利用对象访问属性的方法,判断对象中是否存在重复的key
      
      function deWeight(arr) {
         for (var i = 0; i < arr.length - 1; i++) {
            for (var j = i + 1; j < arr.length; j++) {
               if (arr[i].id == arr[j].id) { // id为需要去重字段
                  arr.splice(j, 1);
                  //因为数组长度减小1,所以直接 j++ 会漏掉一个元素,所以要 j--
                  j--;
               }
            }
         }
         return arr
      }
      console.log(deWeight(person))
      
      // 第四种 封装成方法 使用for循环 利用对象访问属性的方法,判断对象中是否存在重复的key
      // 保留原数据,获取去重后的新数组
      
      function distinct1(arr, key) {
         var newobj = {}, newArr = [];
         for (var i = 0; i < arr.length; i++) {
            var item = arr[i];
            if (!newobj[item[key]]) {
               newobj[item[key]] = newArr.push(item);
            }
         }
         return newArr;
      }
      console.log(distinct1(person, 'id'))
      
      // 第五种 和第四种差不多 保留原数据,获取去重后的新数组
      
      function distinct2(arr, key) {
         var newArr = [];
         for (var i = 0; i < arr.length; i++) {
            var flag = true;
            for (var j = 0; j < newArr.length; j++) {
               if (arr[i][key] == newArr[j][key]) {
                  flag = false;
                  break
               };
            };
            if (flag) {
               newArr.push(arr[i]);
            };
         };
         return newArr;
      }
      console.log(distinct2(person, 'id'))
	
	  // 第六种 会更改数组的原始数据
	  
      function distinct3(arr, key) {
         for (let i = 0; i < arr.length; i++) {
            for (let j = i + 1; j < arr.length; j++) {
               if (arr[i][key] === arr[j][key]) {
                  arr.splice(j, 1);
                  j = j - 1;
               }
            }
         }
         return arr;
      }
      console.log(distinct3(person, 'id'))
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用 Set 和 Map 来实现前端数组去重,具体代码如下:1. 使用 Set: ``` let arr = [1, 2, 2, 4, 5, 4]; let newArr = [...new Set(arr)]; console.log(newArr); // [1, 2, 4, 5] ```2. 使用 Map: ``` let arr = [1, 2, 2, 4, 5, 4]; let map = new Map();for (let item of arr) { if(!map.has(item)) { map.set(item, true); } }let newArr = Array.from(map.keys()); console.log(newArr); // [1, 2, 4, 5] ``` ### 回答2: 前端数组去重几种方法代码可以有以下几种: 1. 使用Set:将数组转换为Set对象,Set对象会自动过滤重复的元素,然后再将Set对象转换回数组。 ```javascript const uniqueArray = (array) => [...new Set(array)]; ``` 2. 使用filter和indexOf:遍历数组,通过indexOf判断元素在数组中的第一个索引是否等于当前索引,如果相等则表示是唯一的元素。 ```javascript const uniqueArray = (array) => array.filter((item, index) => array.indexOf(item) === index); ``` 3. 使用reduce和includes:遍历数组,通过includes判断是否已经存在相同的元素,如果不存在则添加到结果数组中。 ```javascript const uniqueArray = (array) => array.reduce((result, item) => { if (!result.includes(item)) { result.push(item); } return result; }, []); ``` 4. 使用Map:遍历数组,将元素作为Map的键,判断是否已经存在该键,如果不存在则添加到结果数组中。 ```javascript const uniqueArray = (array) => { const map = new Map(); const result = []; for (const item of array) { if (!map.has(item)) { map.set(item, true); result.push(item); } } return result; }; ``` 以上是几种常见的前端数组去重方法,根据具体的情况选择适用的方法。 ### 回答3: 前端数组去重几种方法代码如下: 1. 使用Set数据结构去重: ``` let arr = [1, 2, 2, 3, 3, 4, 5, 5]; let newArr = [...new Set(arr)]; console.log(newArr); // [1, 2, 3, 4, 5] ``` 2. 使用filter方法去重: ``` let arr = [1, 2, 2, 3, 3, 4, 5, 5]; let newArr = arr.filter((item, index) => arr.indexOf(item) === index); console.log(newArr); // [1, 2, 3, 4, 5] ``` 3. 使用reduce方法去重: ``` let arr = [1, 2, 2, 3, 3, 4, 5, 5]; let newArr = arr.reduce((prev, curr) => { if (!prev.includes(curr)) { prev.push(curr); } return prev; }, []); console.log(newArr); // [1, 2, 3, 4, 5] ``` 4. 使用Map数据结构去重: ``` let arr = [1, 2, 2, 3, 3, 4, 5, 5]; let newArr = Array.from(new Map(arr.map(item => [item, item])).values()); console.log(newArr); // [1, 2, 3, 4, 5] ``` 这些方法都可以实现数组去重的功能,具体使用哪种方法取决于项目需求和性能要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值