ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

js去重的几种方法

js去重的几种方法 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.reducearray.reduce(function(total, currentValue, currentIndex, arr), initialValue)参数参数描述function(total,currentValue, index,arr)必需。用于执行每个数组元素的函数。函数参数:参数描述total必需。初始值, 或者计算结束后的返回值。currentValue必需。当前元素currentIndex可选。当前元素的索引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.Mapconst 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}]
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进