1. arr.includes(item) => arr数组里面是否包含item这个元素,返回true或者false,与arr.indexOf(item) === -1相反(等于-1说明不包含这个元素)
let arr =[1,2,3,3,2,1] var newArr = []; for(var i in arr){ !newArr.includes(arr[i]) && newArr.push(arr[i]) } console.log(newArr)2.reduce
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)参数
| 参数 | 描述 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| function(total,currentValue, index,arr) | 必需。用于执行每个数组元素的函数。 函数参数:
| ||||||||||
| initialValue | 可选。传递给函数的初始值 |
let arr =[1,2,3,3,2,1] var newArr = arr.reduce(function (prev, cur) { !prev.includes(cur) && prev.push(cur); return prev; },[]); console.log(newArr)3.Set
这种数据类型里面的元素必须保证唯一性,所以正好可以处理这个问题:
let arr = [1,2,3,3,2,1]
console.log(new Set(arr))
// 直接使用扩展运算符就能再转化为数组
console.log([...new Set(arr)]);
4.利用对象的key是唯一性的特点也可以去重
let arr = [1,2,3,3,2,1]
let obj = {}
arr.forEach(ee=>{
obj[ee] = ''
})
console.log(Object.keys(obj))
5.Map
const map = new Map(); const oldArr = [0, 5, 8, 5, 7, 3, 9, 1, 1, 0]; oldArr.forEach(item => { if (!map.get(item)) { map.set(item, { val: item }); } }); console.log(map, '===map=='); console.log(map.keys(), map.values()); const arr1 = Array.from(map.values(), ee => ee.val); const arr2 = Array.from(map.keys()); console.log(arr1, arr2, Array.isArray(arr1), Array.isArray(arr2));6.lodash
_.uniq([1, 2, 2, 3, 3]); // [1, 2, 3] _.uniqBy([{ id: 1 }, { id: 1 }, { id: 2 }], 'id'); // [{id:1}, {id:2}]