Js中数组去重的几种方法
1.利用Set 方法去重
let nums = [1,4,3,2,5,9,8,3,2,3,4,8] function removeDuplicate(nums) { let set = new Set(nums); return Array.from(set)
// return Array.from(new Set(nums)); } console.log(removeDuplicate(nums));
2.利用Array indexOf, lastIndexOf ,includes,some
arr.indexOf(searchElement[, fromIndex]) 首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
arr.lastIndexOf(searchElement[, fromIndex]) 数组中该元素最后一次出现的索引,如未找到返回-1。
arr.includes(valueToFind[, fromIndex])
返回一个布尔值 Boolean ,如果在数组中找到了(如果传入了 fromIndex ,表示在 fromIndex 指定的索引范围中找到了)则返回 true 。
arr.some(callback(element[, index[, array]])[, thisArg])
数组中有至少一个元素通过回调函数的测试就会返回true;所有元素都没有通过回调函数的测试返回值才会为false。
function removeDuplicate(nums) { let n = nums.length; let newArr = [] for(let i=0;i<n;i++){ //if(newArr.indexOf(nums[i]) === -1){ // if(newArr.lastIndexOf(nums[i]) === -1){ // if(newArr.includes(nums[i]) === false){ if(newArr.some((num)=>num===nums[i]) === false){ newArr.push(nums[i]) } } return newArr; } console.log(removeDuplicate(nums));
3.利用 array.filter
var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
function removeDuplicate(nums) { return nums.filter((num,index,arr)=>{ return arr.indexOf(num) === index; }) } console.log(removeDuplicate(nums));
4.利用 Map
myMap.set(key, value);
myMap.has(key); 如果指定元素存在于Map中,则返回true。其他情况返回false
function removeDuplicate(nums) { let n = nums.length; let map = new Map(); for(let num of nums){ if(!map.has(num)){ map.set(num,0); } } return Array.from(map.keys()); } console.log(removeDuplicate(nums));
5.利用 reduce
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
1)如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。
2)如果数组为空且没有提供initialValue,会抛出TypeError 。
3)如果数组仅有一个元素(无论位置如何)并且没有提供initialValue, 或者有提供initialValue但是数组为空,那么此唯一值将被返回并且callback不会被执行。
function removeDuplicate(nums) { let res = nums.reduce((acc,cur)=>{ if(acc.indexOf(cur) === -1){ acc.push(cur); } return acc; },[]); return res; } console.log(removeDuplicate(nums));
暂时总结了这么多,欢迎大家一起讨论。