【问题标题】:Merge/flatten multidimensional array and remove duplicates Javascript合并/展平多维数组并删除重复的Javascript
【发布时间】:2016-08-11 10:47:01
【问题描述】:

我有一个如下所示的多维数组:

var workouts = [
  [0, Object, 0, 0, 0],
  [Object, 0, 0, 0, 0],
  [0, 0, 0, Object, 0]
];

我想展平/合并数组并删除重复项。结果应如下所示:

[Object, Object, 0, Object, 0]

可以执行吗?

【问题讨论】:

  • 您如何定义删除重复项?为什么你的结果中有两次 0,这不是重复的吗?你试过什么?
  • 您预期的输出中只有 2 个零。对吗?它应该有 3 个零不是吗?
  • 是的,预期输出中应该是 2 个零。我的计划是循环预期的输出,然后根据 0 / 对象渲染不同的元素。
  • 如果内部数组在该索引处有onbect,您是否映射内部数组的索引并用对象标记索引,否则为0?

标签: javascript arrays multidimensional-array


【解决方案1】:

我的理解是,如果存在,您希望将第一个遇到的对象保留在给定列中。

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

【讨论】:

    【解决方案2】:

    聚会迟到了,但我还是想利用:

    这是代码和一个非常鼓舞人心的帖子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

    【讨论】:

      【解决方案3】:
      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

      【讨论】:

        【解决方案4】:

        我愿意这样做;

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

        【讨论】:

        • 我什么都不懂 :( 所有的内联代码和非解释性变量都让它超级难读
        猜你喜欢
        • 1970-01-01
        • 2013-07-23
        • 2021-10-20
        • 1970-01-01
        • 2023-04-02
        • 2014-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多