数组去重

ES6

ES6以下方法除了代码简洁外,对于undefined和NaN也同样可以达到去重的效果

new Set()是ES6新增的数据结构,类似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合,Set本身是一个构造函数,用来生成 Set 数据结构。

  • Set搭配扩展运算符 …

    let arr = [2, '50', undefined, 50, 8, 'aa', 90, 6, 5, 6, 6, 88, 88, 'b', 'aa', undefined, NaN, NaN, 7]
    let newArr = [...new Set(arr)];
    console.log(newArr)

  • Set对象和数组的Array.from

Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。

IE不支持此方法

let arr = [2, '50', undefined, 50, 8, 'aa', 90, 6, 5, 6, 6, 88, 88, 'b', 'aa', undefined, NaN, NaN, 7]
let distinct = arrData => {return Array.from(new Set(arrData))
}
let newArr = distinct(arr)
console.log(newArr)

  • reduce() 搭配includes()

定义和用法

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

reduceRight() 方法的功能和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。

注意: reduce() 对于空数组是不会执行回调函数的。

includes() 方法用于判断字符串是否包含指定的子字符串。

如果找到匹配的字符串则返回 true,否则返回 false。

注意: includes() 方法区分大小写。

reduce()

 includes()

let arr = [2, '50', undefined, 50, 8, 'aa', 90, 6, 5, 6, 6, 88, 88, 'b', 'aa', undefined, NaN, NaN, 7]
let newArr = arr.reduce((total, current) => {return total.includes(current) ? total : total.concat(current);
}, []);
console.log(newArr)

  • Map对象和数组的filter方法

Map对象是ES6提供的一个新的数据结构,其中has的办法是返回一个布尔值,表示某个值是否存在当前的Map对象之中,set的办法是给Map对象设置key/value。

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

let arr = [2, '50', undefined, 50, 8, 'aa', 90, 6, 5, 6, 6, 88, 88, 'b', 'aa', undefined, NaN, NaN, 7]
let distinct = arrData => {const res = new Map();return arrData.filter((a) => !res.has(a) && res.set(a, 1))
}
let newArr = distinct(arr)
console.log(newArr)

ES5

  • indexOf()去重

定义和用

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

如果没有找到匹配的字符串则返回 -1。

function distinct(arrData) {var Array = []for (var i = 0; i < arrData.length; i++) {if (Array.indexOf(arrData[i]) === -1) Array.push(arrData[i])}return Array
}
var arr = [8, 45, 55, 9, 8, 10, 12, 100, 12, 55, 45]
console.log(distinct(arr, '<=arr'))var arr2 = [8, 'aa', 55, 9, 8, 'aa', 12, 'b', 12, 55, 45]
console.log(distinct(arr2, '<=arr2'))

  • sort去重

定义和用法

sort() 方法对数组的项目进行排序。

排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。

默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序。

这适用于字符串("Apple" 出现在 "Banana" 之前)。但是,如果数字按字符串排序,则 "25" 大于 "100" ,因为 "2" 大于 "1"。

function distinct(arrData) {// 利用sort排序功能,相同的数据总会在左右arrData.sort() // sort() 方法会改变原始数组var Array = [arrData[0]];for (var i = 1; i < arrData.length; i++) {if (arrData[i] !== arrData[i - 1]) Array.push(arrData[i]);}return Array;
}
var arr = [8, 45, 55, 9, 8, 10, 12, 100, 12, 55, 45]
console.log(distinct(arr, '<=arr'))var arr2 = [8, 'aa', 55, 9, 8, 'aa', 12, 'b', 12, 55, 45]
console.log(distinct(arr2, '<=arr2'))

  • splice去重

定义和用法

splice() 方法用于添加或删除数组中的元素。

注意:这种方法会改变原始数组。

function distinct(arrData) {for (var i = 0; i < arrData.length; i++) {for (var j = i + 1; j < arrData.length; j++) {//如果当前等同于下一个,splice方法删除下一个if (arrData[i] == arrData[j]) {arrData.splice(j, 1);j--;}}}return arrData;
}
var arr = [8, 45, 55, 9, 8, 10, 12, 100, 12, 55, 45]
console.log(distinct(arr, '<=arr'))var arr2 = [8, 'aa', 55, 9, 8, 'aa', 12, 'b', 12, 55, 45]
console.log(distinct(arr2, '<=arr2'))

字符串去重

let str = 'ghdgshfgdhgf'
//字符串去重
const rdStr = (data) => {return [...new Set(data)].join('')
}
str = rdStr(str);
console.log(str, '<=rdStr');

[记录]es6常用去重方法(数组、字符串)相关推荐

  1. Sql 学习查询多种条件(记录自己常用一些方法,本人学习用)

    Sql 学习查询多种条件(记录自己常用一些方法,本人学习用) 根据 PROCDEFID 对表 BO_ACT_MPDL_PROCESS 最后就行查重 查出多余重复的数据 1.in和exists 方式二: ...

  2. java的知识点15——String基础、String类和常量池、String类常用的方法、字符串相等的判断、组合模式

    String基础 1. String类又称作不可变字符序列. 2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类. 3. Java字符串就是Unicode ...

  3. php时间操作函数总结,基于php常用函数总结(数组,字符串,时间,文件操作)

    数组:[重点1]implode(分隔,arr) 把数组值数据按指定字符连接起来 例如: $arr=array('1','2','3','4'); $str=implode('-',$arr); exp ...

  4. python字符串常用的方法_python字符串常用方法

    1. isalnum() :判断字符串所有的字符都是字母或者数字.返回true和false In [1]: str1='jiangwei520' In [2]: str2='jiang wei' In ...

  5. JavaScript 一维数组、二维数组(某个属性)去重方法

    1.使用ES6语法 set方法数组去重:: a=[1,2,3,4,1,2,3,4]; [...new Set(a)]; //[1, 2, 3, 4] 2.一维数组去重方法 function uniqu ...

  6. [python]开发IC utility 一些常用的方法和函数和语法规则

    文章目录 字符串的replace 字符串的split 字符串的strip 循环for in 判断语句中的and not re.search与re.match 合并元素为一个字符串 判断提供的path是 ...

  7. js中数组常用的方法总结,包括ES6

    原文地址:js中数组常用的方法总结,包括ES6 1.push() 后增 push()方法可以向数组后添加一个新的元素,并返回新数组的长度. 末尾添加,返回长度,改变原数组 var a = [1,2,3 ...

  8. 常用的js数组去重的方法

    常用的js数组去重的方法 1. 使用for循环去重 2.使用set对象去重 3.使用数组索引indexOf()方法搭配for循环去重 4.使用includes()方法搭配for循环去重 5.使用fif ...

  9. es6 数组去重_JS数组去重的9种方法(包括去重NaN和复杂数组类型)

    其实网上已经有很多js数组的去重方法,但是我看了很多篇并自己通过代码验证,发现都有一些缺陷,于是在研究多篇代码之后,自己总结了9种方法,如果有哪里不对请及时纠正我哈~ 测试代码 let arr1 = ...

最新文章

  1. linux 系统调用 read,write和lseek 使用
  2. oop第二章1知识点汇总
  3. 脊回归(Ridge Regression) 岭回归
  4. BootStrap 效果展示
  5. Linux(内核和用户态的)动态内存管理
  6. .NET/.NET Core中更清晰的堆栈跟踪
  7. 百度地图LV1.5实践项目开发工具类bmap.util.jsV1.2
  8. 声音均衡器怎么调好听_汽车10段音效最佳设置,手把手教你调节车载音响均衡器...
  9. Visual Studio Code快速删除空行及几个常用快捷键总结
  10. 遍历界面控件 android,Android 判断所有字段是否已经输入的实例
  11. JavaScript权威指南 - 数组
  12. QT程序自动拷贝所需动态库批处理
  13. LVS和Keeplive
  14. tp框架like模糊查询报错
  15. 使用链表实现栈stack
  16. 书写软件之钢笔笔迹实现(一)
  17. 笛卡尔坐标系中八个卦限对应的位置
  18. 8000字解读全域用户体验丨星巴克的尖刀与钝点
  19. c++QT笔记,windows毛玻璃窗口实现封装
  20. 期货中的正向交易与反向交易

热门文章

  1. Cocos适配带虚拟导航栏手机(HUAWEI 荣耀6 Plus)
  2. 网页防封链接制作的原理有哪些?
  3. 2022全国大学生数学建模A题的思路与解法
  4. Java web学习——Spring MVC项目实例,三层架构通过JDBC链接SQLServer2012
  5. 计算机四级网络工程师 郑州报考条件,郑州一建报考条件2021年
  6. 多机房UPS及环境集中监控方案丨UPS环境综合监控主机
  7. 已知最小小行星准备迎接人类探视
  8. android最新版本9.1,微信9.1.0版本
  9. Java毕设项目:智慧校园管理系统
  10. 刘克亚励志演讲(清晨/夜晚)