JavaScript中如何對(duì)多維數(shù)組(矩陣)去重的實(shí)現(xiàn)
今天碰到了一個(gè)問(wèn)題,需要對(duì)一個(gè)數(shù)組矩陣進(jìn)行去重處理。
比如如下數(shù)組矩陣:
[ [1, 2, 3], [2, 3, 4], [2, 1, 3], [5, 6, 7] ]
接下來(lái)是去重處理的方法。
1.適用于純數(shù)字?jǐn)?shù)組矩陣和字符數(shù)字?jǐn)?shù)組矩陣
// 本節(jié)用例: // 1.純數(shù)字?jǐn)?shù)組矩陣 [ [1, 2, 3], [2, 3, 4], [2, 1, 3], [5, 6, 7] ] // 2.字符數(shù)字?jǐn)?shù)組矩陣 [ ['1', '2', '3'], ['2', '3', '4'], ['2', '1', '3'], ['5', '6', '7'] ] // 如果數(shù)字和字符數(shù)字混合的話,類似于 [1, '2', 3] 和 ['1', '2', 3] 會(huì)被認(rèn)為是等價(jià)的...
主要利用對(duì)象屬性名比較的方法,因?yàn)橐粋€(gè)對(duì)象中每個(gè)屬性的屬性名是唯一的。
function unique(matrix) {
let obj = {};
let res = [];
matrix.map(item => {
item.sort((a, b) => a - b);
if (!obj.hasOwnProperty(item)) {// 判斷對(duì)象中是否有這個(gè)屬性名
obj[item] = item;
res.push(item);
}
})
return res;
}
上面的方法可以進(jìn)一步優(yōu)化成為:
// 這樣更簡(jiǎn)潔
function unique(matrix) {
let res = {};
matrix.map(item => {
item.sort((a, b) => a - b);
res[item] = item;
})
return Object.values(res);
}
2.適用于純文字字符數(shù)組矩陣
// 本節(jié)用例: // 純文字字符數(shù)組矩陣 [ ["你的", "我", "它"], ["我", "你的", "它"], ["一", "二", "三"], ["三", "二", "一"], ["你d", "a", "它"], ["a", "你d", "它"], ["one", "two", "three"], ["three", "two", "one"] ]
分別利用對(duì)象屬性名比較和ES6語(yǔ)法中的Set
(1) 利用屬性名比較,將上面的方法稍微改動(dòng)一下就可以實(shí)現(xiàn)
// 數(shù)組元素可能位置不同但元素內(nèi)容相同,所以必須按照某一順序?qū)ζ溥M(jìn)行排序,這里按首字母對(duì)字符串進(jìn)行排序
function _unique(matrix) {
let res = {};
matrix.map(item => {
item.sort((a, b) => a.localeCompare(b));
res[item] = item;
})
return Object.values(res);
}
(2) 利用ES6語(yǔ)法中的Set,Set中的每個(gè)值都是唯一的
function _unique(matrix) {
let res = [];
matrix.map(item => {
res.push(item.sort((a, b) => a.localeCompare(b)).toString());
})
// return Array.from(new Set(res)).map(item => item.split(','))
return [...new Set(res)].map(item => item.split(','));// 上下等價(jià)
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaScript中數(shù)組去重的5種方法
- JS數(shù)組扁平化、去重、排序操作實(shí)例詳解
- JavaScript數(shù)組去重實(shí)現(xiàn)方法小結(jié)
- JS數(shù)組屬性去重并校驗(yàn)重復(fù)數(shù)據(jù)
- 高性能js數(shù)組去重(12種方法,史上最全)
- JS實(shí)現(xiàn)的字符串?dāng)?shù)組去重功能小結(jié)
- JavaScript數(shù)組去重的方法總結(jié)【12種方法,號(hào)稱史上最全】
- JS實(shí)現(xiàn)數(shù)組去重,顯示重復(fù)元素及個(gè)數(shù)的方法示例
- JavaScript常用8種數(shù)組去重代碼實(shí)例
相關(guān)文章
淺談JS運(yùn)算符&&和|| 及其優(yōu)先級(jí)
下面小編就為大家?guī)?lái)一篇淺談JS運(yùn)算符&&和|| 及其優(yōu)先級(jí)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
微信小程序開(kāi)發(fā)之實(shí)現(xiàn)別踩白塊游戲
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)微信小程序開(kāi)發(fā)一個(gè)簡(jiǎn)單的別踩白塊游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以和小編一起學(xué)習(xí)一下2023-02-02
微信小程序?qū)崿F(xiàn)傳遞多個(gè)參數(shù)與事件處理
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)傳遞多個(gè)參數(shù)與事件處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
用Golang運(yùn)行JavaScript的實(shí)現(xiàn)示例
這篇文章主要介紹了用Golang運(yùn)行JavaScript的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
js原生map實(shí)現(xiàn)的方法總結(jié)
在本篇文章里小編給大家整理了關(guān)于js原生map實(shí)現(xiàn)的方法以及實(shí)例分析內(nèi)容,需要的朋友們可以參考下。2020-01-01
國(guó)外JavaScript經(jīng)典封裝集合整理
國(guó)外JavaScript經(jīng)典封裝集合整理...2007-05-05
JS實(shí)現(xiàn)的簡(jiǎn)單下拉框聯(lián)動(dòng)功能示例
這篇文章主要介紹了JS實(shí)現(xiàn)的簡(jiǎn)單下拉框聯(lián)動(dòng)功能,涉及javascript事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下2018-05-05

