数组去重
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');