關(guān)于數(shù)組去重的問題

先來看兩種解法:

//es6解法
const arr = [1, 1, 2, 3, 4, 4, 5, 5]
console.info([...new Set(arr)])
//es5解法
const arr = [1, 1, 2, 3, 4, 4, 5, 5]
const res = []
for(let i = 0; i < arr.length; res.indexOf(arr[i++]) === -1 && res.push(arr[i - 1]));
console.info(res)

擴(kuò)展運(yùn)算符 ... 是把數(shù)組或類數(shù)組對(duì)象展開成一系列用逗號(hào)隔開的值。ES6提供了新的數(shù)據(jù)結(jié)構(gòu)Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值,set內(nèi)部可用for...of...遍歷。Set函數(shù)可以接受一個(gè)數(shù)組(或類似數(shù)組的對(duì)象)作為參數(shù),用來初始化。例如:var set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4]

//第二種寫法實(shí)際上是:
const arr = [1, 1, 2, 3, 4, 4, 5, 5]
const res = []
for(let i = 0; i < arr.length; i++){
    res.indexOf(arr[i]) === -1 && res.push(arr[i])
};
console.info(res)

三個(gè)注意點(diǎn):res.indexOf(arr[i++]) === -1 實(shí)際上是先判斷是否等于 -1 然后 i 再自增 1 的。&&運(yùn)算符從左往右依次判斷,當(dāng)當(dāng)前值為true則繼續(xù),為false則返回此值(是返回未轉(zhuǎn)換為布爾值時(shí)的原值)。res.push(arr[i - 1])里的 i 實(shí)際上實(shí)際上已經(jīng)是自增 1 以后的了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容