合并/展平多维数组并去除重复项 Javascript

4

我有一个多维数组,看起来像这样:

var workouts = [
  [0, Object, 0, 0, 0],
  [Object, 0, 0, 0, 0],
  [0, 0, 0, Object, 0]
];
我希望将数组展平/合并并删除重复项。结果应该类似于这样:
[Object, Object, 0, Object, 0]

这是否可以执行?


3
你如何定义“去重”?为什么你的结果中有两个0,这不是重复吗?你尝试过什么? - UnknownFury
你期望的输出中只有2个零,是吗?应该不是应该有3个零吗? - Rajaprabhu Aravindasamy
是的,预期输出中应该有2个零。 我的计划是循环预期输出,然后根据0 /对象呈现不同的元素。 - malen
你是否在映射内部数组的索引,并在该索引处有对象时标记为该对象,如果没有则标记为0? - Redu
4个回答

2

我理解您的意思是,如果存在给定列中的第一个对象,则希望保留该对象。

您可以使用.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));


1

虽然晚到了,但我仍然想利用以下内容:

以下是代码和一些非常启发性的帖子12:

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。

0
我会这样做:

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);


3
我不明白任何东西 :( 所有的内嵌代码和未解释的变量使其非常难以阅读。 - Piotr Kula

0
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));

http://codepen.io/anon/pen/WxLrqL


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,