我有一个多维数组,看起来像这样:
var workouts = [
[0, Object, 0, 0, 0],
[Object, 0, 0, 0, 0],
[0, 0, 0, Object, 0]
];
我希望将数组展平/合并并删除重复项。结果应该类似于这样:
[Object, Object, 0, Object, 0]
这是否可以执行?
我有一个多维数组,看起来像这样:
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));
虽然晚到了,但我仍然想利用以下内容:
Array.prototype.flat()将维度降至1,Set来消除重复项,Spread Syntax从该集合中获取数组。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))
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);
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));