Javascript數(shù)組去重 (對(duì)象唯一性伟葫、雙層遍歷) 類型去重

數(shù)組去重是日常工作經(jīng)常出現(xiàn)的場(chǎng)景,解決辦法有多種官卡,簡(jiǎn)潔的刻坊、詳細(xì)的等等泣侮,舉例我用到過(guò)的方法

利用數(shù)組對(duì)象的唯一性

object.hasOwnProperty(prop),返回一個(gè)布爾值,對(duì)象自身中是否有該屬性紧唱,忽略從原型鏈上繼承的屬性活尊,兼容性強(qiáng)

// 數(shù)組去重
const array = [{ value: 1 }, { value: '1' }, { value: 2 }, '1', 1, 1]

const notReapeatedArray = []

let notReapeatedObj = {}

for (let index = 0; index < array.length; index++) {
    const prop = array[index];
    // 去除JS強(qiáng)制類型轉(zhuǎn)換的干擾隶校,比如1、"1"是不相等的
    const rely = prop + JSON.stringify(prop)

    // hasOwnProperty不會(huì)遍歷原型鏈上的屬性

    if (!notReapeatedObj.hasOwnProperty(rely)) {
        notReapeatedObj[rely] = true
        notReapeatedArray.push(prop)
    }
}
// [ { value: 1 }, { value: '1' }, { value: 2 }, '1', 1 ]
console.log(notReapeatedArray);

兩次for循環(huán)

// 數(shù)組去重
const array = ['1', 1, '1', ['15'], 15]

// 沒(méi)有重復(fù)項(xiàng)的數(shù)組蛹锰,待push
const notReapeatedArray = []

for (i = 0; i < array.length; i++) {

    // 遍歷數(shù)組的每一項(xiàng)深胳,是否在notReapeatedArray中出現(xiàn)過(guò),若是铜犬,跳出循環(huán)舞终,否則放到notReapeatedArray里
    for (j = 0; j < notReapeatedArray.length; j++) {
        if (array[i] === notReapeatedArray[j]) {
            // 有相同項(xiàng)出現(xiàn)了,直接跳出循環(huán)癣猾,說(shuō)明array[i]已經(jīng)存在了
            break
        }
    }
    // array[i] 在數(shù)組notReapeatedArray中循環(huán)后未出現(xiàn)過(guò)敛劝,j肯定是notReapeatedArray的長(zhǎng)度,因?yàn)槊恳豁?xiàng)都被循環(huán)了
    if (j == notReapeatedArray.length) {
        notReapeatedArray.push(array[i])
    }
}
console.log(notReapeatedArray);//[ '1', 1, [ '15' ], 15 ]


filter遍歷纷宇,結(jié)合indexOf夸盟,兼容ie9及以上

filter返回一個(gè)新數(shù)組,其中包含所有符合過(guò)濾規(guī)則的元素像捶,兼容ie9及以上上陕,兼容舊環(huán)境,polyfill拓春,點(diǎn)我
indexOf()方法返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引释簿,如果不存在,則返回-1,兼容ie9及以上硼莽;兼容舊環(huán)境庶溶,polyfill,點(diǎn)我
把polyfill加到代碼中即可


// 使用filter方便判斷當(dāng)前項(xiàng)是否和上一項(xiàng)相同
const array = ['1', 1, '1', ['15'], 15]

const notReapeatedArray = array.filter((item, index) => {
    return array.indexOf(item) === index
})

console.log(notReapeatedArray);//[ '1', 1, [ '15' ], 15 ]

ES6 Set對(duì)象

Set中的元素只會(huì)出現(xiàn)一次懂鸵,即Set中的元素是唯一的
ES6的兼容性經(jīng)過(guò)babel處理就行啦

const array = ['1', 1, '1', ['15'], 15]

const notReapeatedArray = new Set(array)
//返回一個(gè)Set對(duì)象渐尿,Set { '1', 1, [ '15' ], 15 }
console.log(notReapeatedArray);
//用Array.from 轉(zhuǎn)成Array
Array.from(notReapeatedArray)//[ '1', 1, [ '15' ], 15 ]
// 用...操作符把Set轉(zhuǎn)換成Array
console.log([...notReapeatedArray]);//[ '1', 1, [ '15' ], 15 ]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市矾瑰,隨后出現(xiàn)的幾起案子砖茸,更是在濱河造成了極大的恐慌,老刑警劉巖殴穴,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凉夯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡采幌,警方通過(guò)查閱死者的電腦和手機(jī)劲够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)休傍,“玉大人征绎,你說(shuō)我怎么就攤上這事。” “怎么了人柿?”我有些...
    開(kāi)封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵柴墩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我凫岖,道長(zhǎng)江咳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任哥放,我火速辦了婚禮歼指,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甥雕。我一直安慰自己踩身,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布社露。 她就那樣靜靜地躺著挟阻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呵哨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天轨奄,我揣著相機(jī)與錄音孟害,去河邊找鬼。 笑死挪拟,一個(gè)胖子當(dāng)著我的面吹牛挨务,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玉组,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谎柄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了惯雳?” 一聲冷哼從身側(cè)響起朝巫,我...
    開(kāi)封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎石景,沒(méi)想到半個(gè)月后劈猿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潮孽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年揪荣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片往史。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仗颈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椎例,到底是詐尸還是另有隱情挨决,我是刑警寧澤请祖,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站凰棉,受9級(jí)特大地震影響损拢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撒犀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一福压、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧或舞,春花似錦荆姆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至诈豌,卻和暖如春仆救,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矫渔。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工彤蔽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庙洼。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓顿痪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親油够。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚁袭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容