js之陣列去重

2021-10-24 00:26:51 字數 3178 閱讀 9217

const unique = (arr)=>}}

return arr;

};const unique = (arr)=>

if(j === newarr.length)

}return newarr;

}unique([1, '1', '1', 1, 2, true, false, true, 3, 2, 2, 1]); // [ 1, '1', 2, true, false, 3 ]

核心點:

2.1 indexof簡化一層迴圈判斷

核心點:

const unique = (arr) => 

}return res;

}

2.2 includes簡化一層迴圈判斷

核心點:

const unique = (arr) => 

}return res;

}

2.3 indexof和includes對於當前場景的選擇

返回值可以直接作為if的條件語句,簡潔

if(res.indexof(arr[i]) !== -1 )

// or

if(res.includes(arr[i]))

識別nan

如果陣列中有nan,你又正好需要判斷陣列是否有存在nan,這時你使用indexof是無法判斷的,你必須使用includes這個方法。

var arr = [nan, nan];

arr.indexof(nan); // -1

arr.includes(nan); // true

識別undefined

如果陣列中有undefined值,includes會認為空的值是undefined,而indexof不會。

var arr = new array(3);

console.log(arr.indexof(undefined)); //-1

console.log(arr.includes(undefined)) //true

核心點:

var arr = [1, 1, '1'];

function unique(arr)

last = sortedarr[i]; // 記錄上乙個值

}return res;

}console.log(unique(array));

核心點:

var arr = [1, 2, 1, 1, '1'];

const unique = function (arr) )

return res;

}console.log(unique(arr)); // [ 1, 2, '1' ]

結合排序的思路:

var arr = [1, 2, 1, 1, '1'];

const unique = function (arr) )

}console.log(unique(arr));

前面提到的幾種方式總結下來大致分為

非排序陣列,兩次遍歷判斷(遍歷、查詢)

排序陣列,相鄰元素比較

我們再提出一種方式,利用object物件 key-value的方式,來統計陣列中元素出現的個數,初步判斷邏輯也有兩種

[1,1,1,2,2,3,'3']舉例:

統計每個元素出現的次數,obj:, 返回這個objkey而不管他們的value只元素首次出現,再次出現則證明他是重複元素

5.1 統計次數

var arr = [1, 2, 1, 1, '1', 3, 3];

const unique = function(arr) ;

var res = ;

arr.foreach(item =>

});return res;

}console.log(unique(arr)); // [1, 2, 3]

5.2 結合filter

var arr = [1, 2, 1, 1, '1'];

const unique = function(arr) ;

return arr.filter(function(item, index, arr))

}console.log(unique(arr)); // [1, 2]

5.3 key: value存在的問題

物件的屬性是字串型別的,即本身數字1字串『1』是不同的,但儲存到物件中時會發生隱式型別轉換,導致去重存在一定的隱患。

考慮到string和number的區別(typeof 1 === 『number』, typeof 『1』 === 『string』),

所以我們可以使用typeof item + item拼成字串作為 key 值來避免這個問題:

var arr = [1, 2, 1, 1, '1', 3, 3, '2'];

const unique = function(arr) ;

var res = ;

arr.foreach(item =>

});return res;

}console.log(unique(arr)); // [ 1, 2, '1', 3, '2' ]

js之陣列去重

面試常考的點之一吧 我也只被考過set的用法而已 先上最簡單版 利用set new set arr es6 提供了新的資料結構set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。new set array 得到的是乙個set陣列 沒有重複值 三個點為擴充套件運算子,得到用逗號分隔的引數序列,...

JS之陣列去重

方案一,使用物件判斷陣列是否重複,發現重複則刪除當前項,並再次遍歷當前索引.function unique1 arr 建立乙個空物件 for var i 0 iobj item item 若沒有重複,則給obj新增當前項到屬性 return arr 遍歷完成,將結果返回出去 方案二,使用物件判斷陣列...

js 之 陣列去重

陣列去重,一般都是在面試的時候才會碰到,一般是要求手寫陣列去重方法的 如果是被提問到,陣列去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。在真實的專案中碰到的陣列去重,一般都是後台去處理,很少讓前端處理陣列去重。雖然日常專案用到的概率比較低,但還是需要了解一下,以防面試的時候可能...