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));

暫時總結了這么多,歡迎大家一起討論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM