[英]Merge/flatten multidimensional array and remove duplicates Javascript
我有一個多維數組,如下所示:
var workouts = [
[0, Object, 0, 0, 0],
[Object, 0, 0, 0, 0],
[0, 0, 0, Object, 0]
];
我想展平/合並數組並刪除重復項。 結果應該是這樣的:
[Object, Object, 0, Object, 0]
可以表演嗎?
我的理解是,如果存在,您希望將第一個遇到的對象保留在給定列中。
你可以用.map()
和.reduce()
做到這一點:
var workouts = [ [0, {id:1}, 0, 0, 0], [{id:2}, 0, 0, 0, 0], [0, 0, 0, {id:3}, 0] ]; var res = workouts.reduce(function(a, b) { return b.map(function(e, i) { return a[i] instanceof Object ? a[i] : e; }); }, []); console.log(JSON.stringify(res));
var workouts = [
[0, {id:1}, 0, 0, 0],
[{id:2}, 0, 0, 0, 0],
[0, 0, 0, {id:3}, 0]
];
function flattenArray (array){
var newArray = [];
for (i=0; i<array.length; i++){
var subArray = array[i];
for (ii=0; ii<subArray.length; ii++){
if (newArray.indexOf(subArray[ii]) == -1){
newArray.push(subArray[ii]);
}
}
}
return newArray;
}
console.log(flattenArray(workouts));
我會這樣做;
var workouts = [[0, {a:1}, 0, 0, 0], [{b:2}, 0, 0, 0, 0], [0, 0, 0, {c:3}, 0] ], result = workouts.reduce((p,c) => p = c.map((e,i) => e || p[i] || 0 ),[]) console.log(result);
聚會遲到了,但我仍然想利用:
Array.prototype.flat()
用於將維度減少到 1,Set
為刪除欺騙Spread Syntax
用於從該集合中獲取數組。JSON.stringify
並解析回來以處理對象的JSON.stringify
。 const myArray = [ [0, {id:1}, 0, 0, 0], [{id:2}, 0, 0, 0, 0], [0, 0, 0, {id:2}, 0] ] const myFlatArray = myArray.flat() const result = [...new Set(myFlatArray.map(JSON.stringify))].map(JSON.parse) console.log(JSON.stringify(result))
注意:此解決方案必須支持 ES6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.