数组去重(包括es6)
生活随笔
收集整理的這篇文章主要介紹了
数组去重(包括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 (執行數組中每個值的函數,包含四個參數)
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()的作用,可以把偽類數組對象,可迭代對象轉化為數組。
總結
以上是生活随笔為你收集整理的数组去重(包括es6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue单向数据流与双向绑定两者区别
- 下一篇: A Router may have on