利用ES6 Set去重
实现思路:使用ES6得Set函数去重
缺点:代码兼容性不好,无法去除”{}“空对象
function unique(arr) {
return Array.from(new Set(arr))
}
indexOf去重
实现思路:新建一个数组newArr存放结果,循环需去重的数组arr,当前值在newArr中不存在,就加入到newArr
缺点:indexOf() 方法对大小写敏感
function unique(arr) {
let newArr = []
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1)newArr.push(arr[i])
}
return newArr
}
Map去重
实现思路:新建一个Map对象,根据map的对象键唯一的特性,将值作为键插入,循环判断值在map中是否存在,不存在,则插入值,循环结束,获取map的所有key值转化为数组
function unique(arr) {
let map = new Map
for (let i = 0; i < arr.length; i++) {
if (!(map.has(arr[i]))) map.set(arr[i], true)
}
return Array.from(map.keys())
}
循环去重
实现思路:两层循环,外循环表示从0到arr.length,内循环表示从i+1到arr.length,比对值,如果没重复的arr[i]放入新数组,反之终止当前循环同时进入外层循环的下一轮判断
function unique(arr) {
var newArr = []
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
++i
}
}
newArr.push(arr[i])
}
return newArr
}