日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组去重(包括es6)

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组去重(包括es6) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.最基本的去重方法

思路:定義一個新數組,并存放原數組的第一個元素,然后將元素組一一和新數組的元素對比,若不同則存放在新數組中。

function unique(arr){var repeat=false;var res = [arr[0]];for(var i=1;i<arr.length;i++){var repeat = false;for(var j=0;j<res.length;j++){if(arr[i] === res[j]){repeat = true;break;}}if(!repeat){res.push(arr[i]);}}return res; }

2.先排序在去重

思路:先將原數組排序,在與相鄰的進行比較,如果不同則存入新數組

function unique(arr){var arr2 = arr.sort();var res = [arr2[0]];for(var i=1;i<arr2.length;i++){if(arr2[i] !== res[res.length-1]){res.push(arr2[i]);}}return res; }

這個方法不推薦:比如

var arr=[1,'1',2,1,3,4,1]; var arr2=arr.sort(); console.log(arr2);//[1, "1", 1, 1, 2, 3, 4] unique(arr);//[1,"1",1,2,3,4]

3.利用reduce去重(推薦)

arr.reduce(callback,[initialValue])
callback (執行數組中每個值的函數,包含四個參數)

  • prev (第一次的prev的值是數組的第一個值或者是提供的初始值(initialValue),上一次調用回調返回的值)
  • curr (prev設置初始值的化,curr就為數組第一個值,否則為第二個值。數組中當前被處理的元素)
  • index (當前元素在數組中的索引)
  • array (調用 reduce 的數組)
  • initialValue (作為第一次調用 callback 的第一個參數。)

    //初始化prev為[],curr為1 newArr4 = arr4.reduce((prev, curr) => prev.includes(curr)? prev : [...prev,curr],[])

    4.利用對象的屬性去重(推薦)

    思路:每次取出原數組的元素,然后在對象中訪問這個屬性,如果存在就說明重復

    function unique(arr){var res =[];var json = {};for(var i=0;i<arr.length;i++){if(!json[arr[i]]){res.push(arr[i]);json[arr[i]]={};json[arr[i]].key=arr[i];}}return res; }

    這個方法不推薦使用:比如

    var arr=[1,'1',2,3]; unique(arr);// [1, 2, 3]

    5.利用indexOf或includes查詢

    function unique(arr){var newArr = [arr[0]];for(var i=1;i<arr.length;i++){if(newArr.indexOf(arr[i]) == -1){newArr.push(arr[i]);}}return newArr; }

    使用es6 數組includes()方法

    let newArr2 = [] for (let i = 0; i < arr.length; i++) {if (!newArr2.includes(arr[i])) {newArr2.push(arr[i])}} console.log(newArr2);

    indexOf方法有兩個缺點,一是不夠語義化,它的含義是找到參數值的第一個出現位置,所以要去比較是否不等于-1,表達起來不夠直觀。二是,它內部使用嚴格相等運算符(===)進行判斷,這會導致對NaN的誤判。

    6.es6的Set與Array.from() (最簡潔)

    set是一種新的數據結構,它可以接收一個數組或者是類數組對象,自動去重其中的重復項目,set返回的是一個對象。
    Array.from()的作用,可以把偽類數組對象,可迭代對象轉化為數組。

    var arr=[1,2,1,'1',null,null,undefined,undefined,NaN,NaN] let res=Array.from(new Set(arr));//{1,2,"1",null,undefined,NaN} //or let newarr=[...new Set(arr)]

    總結

    以上是生活随笔為你收集整理的数组去重(包括es6)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。