摘要:數組去重看了網上很多數組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結。還有就是方法返回的數組也是排序后的數組,某些情況下可能不符合要求。
JS數組去重
看了網上很多數組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結。
部分內容參考該博客
1 . 在原數組上操作(基本方法)
思路:利用循環嵌套,判斷數組中每個元素與其后面的元素是否相等,如果相等,就使用splice方法刪掉后面的元素,注意j--。
function dedupe2(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
2 . 數組去重后返回一個新數組
思路:新建一個數組,遍歷需要去重的數組,使用indexOf判斷新數組中是否包含之前數組中每一項,不包含就push進去。
function dedupe1(arr) {
var newarr = [];
for (var i = 0; i < arr.length; i++) {
if (newarr.indexOf(arr[i]) == -1) {
newarr.push(arr[i]);
}
}
return newarr;
}
3 . 利用對象的屬性去重
思路:每次從數組中取出一個元素,到對象中去訪問這個屬性,如果能訪問到就說明重復。
function dedupe3(arr) {
var newarr = [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
newarr.push(arr[i]);
obj[arr[i]] = 1;
}
}
return newarr;
}
4 . 利用ES6中的Set數據結構和擴展運算符(參考ES6標準入門)
[...new Set([array])];
5 . 還是利用ES6中的Set
function dedupe4(arr) {
return Array.from(new Set(arr));
}
當然,數組去重的方法還有很多很多很多,例如常用的先排序后去重,但是我看了一些帖子,發現其中存在一些問題,排序時是用到了sort方法,但是并沒有給sort方法一個正確的排序函數,默認情況下sort方法比較的是字符串,因此會出現一些問題。還有就是sort方法返回的數組也是排序后的數組,某些情況下可能不符合要求。
以上只是個人的一個小總結,代碼都是經過測試后的,有問題請指正,也歡迎大家補充,謝謝。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/93683.html
摘要:最基本的去重方法思路定義一個新數組,并存放原數組的第一個元素,然后將元素組一一和新數組的元素對比,若不同則存放在新數組中。利用將結構轉換成數組拓展運算符內部使用循環方法思路方法將傳入的數組或非數組值與原數組合并組成一個新的數組并返回。 1.最基本的去重方法 思路:定義一個新數組,并存放原數組的第一個元素,然后將元素組一一和新數組的元素對比,若不同則存放在新數組中。 function u...
閱讀 3350·2021-11-17 09:33
閱讀 1918·2021-10-12 10:13
閱讀 2802·2021-09-22 15:48
閱讀 2656·2019-08-29 17:19
閱讀 2743·2019-08-26 11:50
閱讀 1790·2019-08-26 10:37
閱讀 1928·2019-08-23 16:54
閱讀 3086·2019-08-23 14:14