幾種常用的js陣列去重方法
阿新 • • 發佈:2019-01-31
Array.prototype.distinct = function(){ var arr = this, result = [], i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] === arr[j]){ j = ++i; } } result.push(arr[i]); } return result; } var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct(); //返回[3,4,2,1]
方法二:利用物件的屬性不能相同的特點進行去重
Array.prototype.distinct = function (){ var arr = this, i, obj = {}, result = [], len = arr.length; for(i = 0; i< arr.length; i++){ if(!obj[arr[i]]){ //如果能查詢到,證明陣列元素重複了 obj[arr[i]] = 1; result.push(arr[i]); } } return result; }; var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,]; var b = a.distinct(); console.log(b.toString()); //1,2,3,4,5,6,56
方法三:利用ES6的set
Set資料結構,它類似於陣列,其成員的值都是唯一的。
利用Array.from將Set結構轉換成陣列
function dedupe(array){ return Array.from(new Set(array)); } dedupe([1,1,2,3]) //[1,2,3]
拓展運算子(...)內部使用for...of迴圈
let arr = [1,2,3,3]; let resultarr = [...new Set(arr)]; console.log(resultarr); //[1,2,3]
方法四:使用indexOf
var arr1 =[1,2,2,2,3,3,3,4 ,5,6],
arr2 = [];for(var i =0,len =arr1.length; i< len; i++){
if(arr2.indexOf(arr1[i]) <0){
arr2.push(arr1[i]);
}}document.write(arr2);// 1,2,3,4,5,6