JavaScript中数组去重的5种方法

 更新时间:2020年07月04日 09:10:27   作者:老甄Home  
这篇文章主要介绍了JavaScript中数组去重的5种方法,文中讲解非常详细,实例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

正常情况下,数据去重的工作一般都是由后端同事来完成的,但是前端也要掌握好处理数据的能力,万一去重的工作交给我们大前端处理,我们也不能怂呀。现在我总结了一些去重的方法,希望对大家有点帮助。

方法一:new Set()实现数组去重

ES6 提供了新的数据结构 Set,它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函数,用来生成 Set 数据结构。Set函数可以接受一个数组,用于初始化。根据 Set的数据特性,我们可以实现数组去重。

let list = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
let list1 = Array.from(new Set(list)); // [ 1, "a", true, false, null, "", undefined ]
let list2 = [...new Set(list)]; // [ 1, "a", true, false, null, "", undefined ]

方法二:some()+循环去重

some() 方法用于检测数组中的元素是否满足指定条件(函数提供) 。 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。 如果没有满足条件的元素,则返回false。 我们可以定义一个新数组来承接没有重复的数据,遍历原始数组的时候,用新数组来判断数据是否已经出现过。

 function distinct(list) {
   let result = [list[0]];// 用于承接没有重复的数据,初始时将原始数组的第一个值赋给它。
   for (let i = 1; i < list.length; i++) {
     // 判断结果数组中是否存在一样的值,若果没有的话则将数据存入结果数组中。
     if (!(result.some(val => list[i] === val))) {
       result.push(list[i]);
     }
   }
   return result;
 }
let arr = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
distinct(arr); // [ 1, "a", true, false, null, "", undefined ]

方法三:双重for循环去重

双重for循环,第一层循环确保数组中的每一项都能被比较,第二层循环确保被比较项后的每一项都能跟被比较项比较。

function distinct2(list) {
  for (let i = 0; i < list.length; i++) {
    for (let j = i + 1; j < list.length; j++) {
      // 后面数据的若跟前一项数据相同,则重复,需要去除。
      if (list[i] === list[j]) {
        list.splice(j, 1); // 去除后面的相同项
        j--;
      }
    }
  }
  return list;
}
let arr = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
distinct2(arr); // [ 1, "a", true, false, null, "", undefined ]

方法四:hasOwnProperty()方法去重

hasOwnProperty() 方法用来检测一个属性是否是对象的自有属性,而不是从原型链继承的。如果该属性是自有属性,那么返回 true,否则返回 false。

function unique(arr) {
 var obj = {}; // 用来记录数组中的数据
 return arr.filter(function(item, index, arr){
   // 如果记录对象中存在某个数据,则返回false过滤掉;否则obj进行记录并筛选出来
   return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
 })
}
let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
unique(arr) // [ 1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, 'a', {}]

方法五:利用filter()+indexOf()方法去重

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

function unique(arr) {
 return arr.filter(function(item, index, arr) {
  // 从数组0位开始查,如果当前元素在原始数组中的第一个索引==当前索引值,说明它是第一次出现。
  return arr.indexOf(item, 0) === index;
 });
}
let list = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
unique(list); // [ 1, "a", true, false, null, "", undefined ]

此外,数组去重还可以利用filter()、includes()等方法实现,但是思路都跟上面几种方法类似,这里就不一一列举了。

以上就是JavaScript中数组去重的5种方法的详细内容,更多关于JavaScript中数组去重的资料请关注脚本之家其它相关文章!

相关文章

  •  javascript数组中的findIndex方法 

     javascript数组中的findIndex方法 

    这篇文章主要介绍了javascript数组中的findIndex方法,findIndex() 方法返回传入一个测试条件函数符合条件的数组第一个元素位置,下面更多相关资料,需要的小伙伴可以参考一下
    2022-03-03
  • javascript无刷新评论实现方法

    javascript无刷新评论实现方法

    这篇文章主要介绍了javascript无刷新评论实现方法,涉及javascript动态添加表格元素的技巧,需要的朋友可以参考下
    2015-05-05
  • JS实现面包屑导航功能从零开始示例

    JS实现面包屑导航功能从零开始示例

    这篇文章主要为大家介绍了JS实现面包屑导航功能从零开始示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • js 利用className得到对象的实现代码

    js 利用className得到对象的实现代码

    利用className得到对象的实现代码,大家可以看下代码的实现原理。
    2011-11-11
  • 实现只能输入数字的input不用replace方法

    实现只能输入数字的input不用replace方法

    只能输入数字在以往都是使用replace方法实现的,在本文你将学习到不使用它依然可以实现,具体代码如下,感兴趣的朋友可以参考下
    2013-09-09
  • js中函数声明与函数表达式

    js中函数声明与函数表达式

    js的解析器对函数声明与函数表达式并不是一视同仁地对待的。对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,
    2015-06-06
  • JavaScript常用工具方法封装

    JavaScript常用工具方法封装

    今天小编就为大家分享一篇关于JavaScript常用工具方法封装,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • JS异步编程之generator与async/await语法糖详解

    JS异步编程之generator与async/await语法糖详解

    这篇文章主要为大家详细介绍了JS异步编程中generator与async/await语法糖的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-11-11
  • JavaScript CollectGarbage函数案例详解

    JavaScript CollectGarbage函数案例详解

    这篇文章主要介绍了JavaScript CollectGarbage函数案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 基于ts的动态接口数据配置的详解

    基于ts的动态接口数据配置的详解

    这篇文章主要介绍了基于ts的动态接口数据配置的详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论