我想知道您將如何洗掉在二維陣列中包含相同元素的陣列。
例如:
let 2dArr = [ [1, 2, 3],
[3, 2, 1],
[2, 4, 5],
[4, 5, 2],
[4, 3, 1] ];
該陣列將洗掉第二個和第四個元素,回傳二維陣列:
returnedArr = [ [1, 2, 3],
[2, 4, 5],
[4, 3, 1] ];
這究竟是如何做到的,保留二維陣列?我只能考慮遍歷元素,通過排序比較元素,然后在進行時洗掉它們,但是如果洗掉元素,這將導致索引錯誤。
uj5u.com熱心網友回復:
1)您可以使用reduce和輕松實作結果Set:
let twodArr = [
[1, 2, 3],
[3, 2, 1],
[2, 4, 5],
[4, 5, 2],
[4, 3, 1],
];
const set = new Set();
const result = twodArr.reduce((acc, curr) => {
const key = [...curr].sort((a, b) => a - b).join();
if (!set.has(key)) {
set.add(key);
acc.push(curr);
}
return acc;
}, []);
console.log(result);
2)您還可以將過濾器用作:
let twodArr = [
[1, 2, 3],
[3, 2, 1],
[2, 4, 5],
[4, 5, 2],
[4, 3, 1],
];
const set = new Set();
const result = twodArr.filter((curr) => {
const key = [...curr].sort((a, b) => a - b).join();
return !set.has(key) ? (set.add(key), true) : false;
});
console.log(result);
uj5u.com熱心網友回復:
您可以使用哈希映射
let arr = [ [1, 2, 3], [3, 2, 1],[2, 4, 5],[4, 5, 2],[4, 3, 1] ];
let obj = {}
let final = []
for(let i=0; i<arr.length; i ){
// create a key
let sorted = [...arr[i]].sort((a,b)=> a- b).join`,`
// check if this is not present in our hash map
// add value to final out and update hash map accordingly
if(!obj[sorted]){
obj[sorted] = true
final.push(arr[i])
}
}
console.log(final)
uj5u.com熱心網友回復:
使用 Array.prototype.filter() 和 Set 作為 thisArg
let arr = [ [1, 2, 3],
[3, 2, 1],
[2, 4, 5],
[4, 5, 2],
[4, 3, 1] ];
let res = arr.filter(function(e){
const sorted = [...e].sort((a,b) => a-b).join('|');
return this.has(sorted) ? false : this.add(sorted)
},new Set)
console.log(res)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395559.html
標籤:javascript 数组 多维数组
上一篇:axios未在Vuejs2中定義
