JavaScript數(shù)組去重的七種方法及特殊數(shù)據(jù)類型處理詳解
一、為什么需要數(shù)組去重?
在數(shù)據(jù)處理場景中,重復(fù)元素會導(dǎo)致:
- 統(tǒng)計結(jié)果失真
- 渲染性能下降(如列表重復(fù)渲染)
- 接口重復(fù)提交風(fēng)險
- 存儲空間浪費
通過去重操作可提升數(shù)據(jù)純凈度,優(yōu)化應(yīng)用性能。以下 7 種常見實現(xiàn)方案。
二、去重方法
1. ES6 Set
function removeDuplicatesWithSet(arr) {
return [...new Set(arr)];
}
原理:
利用 Set 數(shù)據(jù)結(jié)構(gòu)自動去重的特性,通過擴(kuò)展運算符快速轉(zhuǎn)換回數(shù)組
2. filter + indexOf
function removeDuplicatesWithFilter(arr) {
return arr.filter((item, index) => arr.indexOf(item) === index);
}
原理:
通過 indexOf 檢查元素首次出現(xiàn)位置,過濾非首次出現(xiàn)的元素
3. ** for 循環(huán)法**
function removeDuplicatesWithFor(arr) {
const uniqueArray = [];
for (let i = 0; i < arr.length; i++) {
if (uniqueArray.indexOf(arr[i]) === -1) {
uniqueArray.push(arr[i]);
}
}
return uniqueArray;
}
4. 雙重 for 循環(huán)法
function removeDuplicatesWithDoubleFor(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
5. indexOf 首現(xiàn)檢測法
function removeDuplicatesWithIndexOf(arr) {
const uniqueArray = [];
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) === i) {
uniqueArray.push(arr[i]);
}
}
return uniqueArray;
}
原理:
利用 indexOf 返回首個匹配索引的特性
6. includes 檢測法
function removeDuplicatesWithIncludes(arr) {
const uniqueArray = [];
for (let item of arr) {
if (!uniqueArray.includes(item)) {
uniqueArray.push(item);
}
}
return uniqueArray;
}
7. reduce 累積法
function removeDuplicatesWithReduce(arr) {
return arr.reduce((acc, curr) => {
return acc.includes(curr) ? acc : [...acc, curr];
}, []);
}
三、特殊數(shù)據(jù)類型處理
- 對象去重:
// 根據(jù)特定屬性去重
const uniqueByKey = (arr, key) => {
const seen = new Set();
return arr.filter(item =>
seen.has(item[key]) ? false : seen.add(item[key])
};
- NaN 處理:
indexOf無法檢測 NaN(返回 -1)includes可識別 NaN
以上就是JavaScript數(shù)組去重的七種方法及特殊數(shù)據(jù)類型處理詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript數(shù)組去重及特殊數(shù)據(jù)處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript第七種數(shù)據(jù)類型Symbol的用法詳解
Symbol是ES6中引入的一種新的基本數(shù)據(jù)類型,用于表示一個獨一無二的值。它是JavaScript中的第七種數(shù)據(jù)類型。本文將詳細(xì)講講Symbol的使用,需要的可以參考一下2022-09-09
JavaScript中in和hasOwnProperty區(qū)別詳解
in操作符只要通過對象能訪問到屬性就返回true。hasOwnProperty()只在屬性存在于實例中時才返回true。下面通過本文給大家分享JavaScript中in和hasOwnProperty區(qū)別詳解,感興趣的朋友一起看看吧2017-08-08
js模擬淘寶網(wǎng)的多級選擇菜單實現(xiàn)方法
這篇文章主要介紹了js模擬淘寶網(wǎng)的多級選擇菜單實現(xiàn)方法,涉及javascript針對頁面元素結(jié)點的遍歷與設(shè)置等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08
原生JS實現(xiàn)$.param() 函數(shù)的方法
這篇文章主要介紹了原生JS實現(xiàn)$.param() 函數(shù)的方法,由于遇到相關(guān)序列化的問題,但是vue項目中由于減少隊jquery引用的限制,導(dǎo)致不能用$.param來序列化參數(shù),下面小編給大家分享了實例代碼,需要的朋友參考下吧2018-08-08
JavaScript時間與時間戳的轉(zhuǎn)換操作實例分析
這篇文章主要介紹了JavaScript時間與時間戳的轉(zhuǎn)換操作,結(jié)合實例形式分析了javascript日期與時間戳轉(zhuǎn)換相關(guān)函數(shù)與操作技巧,需要的朋友可以參考下2018-12-12
JavaScript中關(guān)于Object.create()的用法
這篇文章主要介紹了JavaScript中關(guān)于Object.create()的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

