JS中給數(shù)組去重的方法小結(jié)
基本思路:
- 首先肯定毫無(wú)疑問(wèn)地想到使用Set對(duì)數(shù)組進(jìn)行去重,但是試過(guò)之后會(huì)發(fā)現(xiàn)單純地使用Set無(wú)法達(dá)到預(yù)期結(jié)果,因?yàn)閿?shù)組里面的元素又是數(shù)組,而Set在進(jìn)行去重時(shí),并不會(huì)將
[1,2]元素
和[1,2]元素
判斷為相等,因?yàn)樗麄儾⒉皇峭粋€(gè)數(shù)組,只是數(shù)組里面存放的元素一樣。 - 那么我們自然而然想到,我們需要想辦法讓Set認(rèn)為
[1,2]元素
和[1,2]元素
相等。我剛開(kāi)始想到的是使用數(shù)組的join(',')
方法將數(shù)組變成字符串,例如[1,2].join(',')
變成'1,2'
,去重之后再將Set里面的元素變成數(shù)組,例如'1,2'.split(',')
變成['1','2']
。但是這樣會(huì)有一個(gè)問(wèn)題,最后得到的是['1','2']
,而我們想要的是[1,2]
,所以這種方式達(dá)不到預(yù)期。
此方式的完整代碼如下:
let arr = [ [1, 2], [3, 4], [1, 2], [5, 6], [3, 4], [11, 13], [11, 12], [11, 13], ]; let temp = arr.map((item) => { return item.join(","); }); console.log(temp); // ['1,2','3,4','1,2','5,6','3,4','11,13','11,12','11,13'] let set = new Set(temp); console.log(set); // Set { '1,2', '3,4', '5,6', '11,13', '11,12' } let res = [...set].map((item) => { return item.split(","); }); console.log(res); /* [ [ '1', '2' ], [ '3', '4' ], [ '5', '6' ], [ '11', '13' ], [ '11', '12' ] ] */
- 最后,我們找到一種方式達(dá)到預(yù)期效果。使用
JSON.stringify()
和JSON.parse()
。
代碼如下:
let arr = [ [1, 2], [3, 4], [1, 2], [5, 6], [3, 4], [11, 13], [11, 12], [11, 13], ]; let temp = arr.map((item) => { return JSON.stringify(item); }); console.log(temp); /* [ '[1,2]', '[3,4]', '[1,2]', '[5,6]', '[3,4]', '[11,13]', '[11,12]', '[11,13]' ] */ let set = new Set(temp); console.log(set); // Set { '[1,2]', '[3,4]', '[5,6]', '[11,13]', '[11,12]' } let result = Array.from(set); console.log(result); // [ '[1,2]', '[3,4]', '[5,6]', '[11,13]', '[11,12]' ] result = result.map((item) => { return JSON.parse(item); }); console.log(result); // [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ], [ 11, 13 ], [ 11, 12 ] ]
相關(guān)知識(shí)點(diǎn):
1. JSON.stringify()
JSON.stringify() 方法將一個(gè) JavaScript 對(duì)象或值轉(zhuǎn)換為 JSON 字符串。
使用 JSON.stringify() 示例:
JSON.stringify({}); // '{}' JSON.stringify(true); // 'true' JSON.stringify("foo"); // '"foo"' JSON.stringify([1, "false", false]); // '[1,"false",false]' JSON.stringify({ x: 5 }); // '{"x":5}'
2. JSON.parse()
JSON.parse() 方法用來(lái)解析 JSON 字符串,構(gòu)造由字符串描述的 JavaScript 值或?qū)ο蟆?/p>
使用 JSON.parse() 示例:
JSON.parse("{}"); // {} JSON.parse("true"); // true JSON.parse('"foo"'); // "foo" JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] JSON.parse("null"); // null
3. Set與數(shù)組之間相互轉(zhuǎn)換
Set轉(zhuǎn)換成數(shù)組有兩種方式:
① [...set]② Array.from(set)數(shù)組轉(zhuǎn)換成Set:new Set(arr)
// Set轉(zhuǎn)換成數(shù)組 let set = new Set(); set.add(1); set.add(2); set.add(2); let arr = [...set]; // [1,2] let arr2 = Array.from(set); // [1,2]
// 數(shù)組轉(zhuǎn)換成Set let arr = [1,2,2,3,1]; let set = new Set(arr); // Set { 1, 2, 3 }
以上就是JS中給數(shù)組去重的方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于JS數(shù)組去重的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序?qū)崿F(xiàn)的一鍵連接wifi功能示例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)的一鍵連接wifi功能,結(jié)合實(shí)例形式分析了微信小程序操作WiFi連接的模塊初始化、配置、連接等相關(guān)操作技巧,需要的朋友可以參考下2019-04-04Three.js?中的屏幕空間環(huán)境光遮蔽SSAO
這篇文章主要為大家介紹了Three.js?中屏幕空間環(huán)境光遮蔽SSAO的原理及實(shí)現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04一文帶你玩轉(zhuǎn)JavaScript的箭頭函數(shù)
在ES6中新增了函數(shù)的簡(jiǎn)寫(xiě)方式----箭頭函數(shù),箭頭函數(shù)的出現(xiàn)不僅簡(jiǎn)化了大量代碼,也讓代碼看起來(lái)更加優(yōu)雅,同時(shí)也解決了this指向問(wèn)題,下面我們就來(lái)詳細(xì)講解如何玩轉(zhuǎn)箭頭函數(shù)2022-09-09使用JavaScript實(shí)現(xiàn)實(shí)時(shí)搜索建議功能
在我們的技術(shù)旅程中,JavaScript 無(wú)疑是一個(gè)不可或缺的伙伴,這篇文章主要為大家詳細(xì)介紹了如何使用 JavaScript 來(lái)實(shí)現(xiàn)一個(gè)復(fù)雜功能,即實(shí)時(shí)搜索建議,感興趣的可以了解下2024-02-02JavaScript實(shí)現(xiàn)的原生態(tài)兼容IE6可調(diào)可控滾動(dòng)文字功能詳解
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的原生態(tài)兼容IE6可調(diào)可控滾動(dòng)文字功能,簡(jiǎn)單說(shuō)明了文字滾動(dòng)的實(shí)現(xiàn)原理并結(jié)合具體實(shí)例形式給出了javascript文字滾動(dòng)功能的具體實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-09-09微信小程序外賣(mài)選購(gòu)頁(yè)實(shí)現(xiàn)切換分類(lèi)與數(shù)量加減功能案例
這篇文章主要介紹了微信小程序外賣(mài)選購(gòu)頁(yè)實(shí)現(xiàn)切換分類(lèi)與數(shù)量加減功能,結(jié)合具體實(shí)例形式分析了微信小程序狀態(tài)記錄、判定及數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-01-01JS動(dòng)態(tài)給對(duì)象添加屬性和值的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇JS動(dòng)態(tài)給對(duì)象添加屬性和值的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10