【问题标题】:best way to flatten n-level array into 2d array将 n 级数组展平为二维数组的最佳方法
【发布时间】:2021-05-07 10:53:42
【问题描述】:

我知道有很多方法可以在 javascript 中展平数组,但我想知道将 n 级数组展平为二维数组的最佳方法是什么

输入数组如下所示:[[[[1,2]]],[2,3]] 我需要将其转换为[[1,2],[2,3]]

我尝试使用 array.flat(),但它仅展平了 1 步,我也尝试了 array.flat(Infinity),但它将整个数组展平为一维数组

问题是不确定我的输入数组的嵌套有多深。我可以考虑递归迭代,但我正在寻找 js 是否有任何优化和现成的方法来实现这一点?

【问题讨论】:

  • 你试过lodash方法吗?
  • 你能建议使用哪一个吗?

标签: javascript arrays multidimensional-array


【解决方案1】:

您可以结合 mapflat(Infinity) 方法将每个子数组展平为一维。

const flatDeep = data => data.map(e => e.flat(Infinity))
console.log(flatDeep([[[[1,2]]],[2,3]]))
console.log(flatDeep([[[[1,2]]],[2,[[[3, [4]]]]]]))

【讨论】:

  • 这看起来不错,但它不能保持最后一级的分组完好无损。我希望将[[[[1,2],[3,4]]],[2,3]] 转换为[[1,2],[2,3],[2,3]] 而不是[[1,2,3,4],[2,3]]
  • @aravind_reddy 那么这种情况下[[[[1,2]]],[2,[[[3, [4]]]]]]的结果应该是什么?
  • 我猜应该是 [[1,2],[2,3,4]]
  • @aravind_reddy 那么那里的逻辑是什么?
  • 对不起,我认为您提供的内容很好,我将在另一个问题中完全发布其他要求
【解决方案2】:

Iterate数组然后使用Array.flat(Infinity)方法。

const list = [[[[1,2]]],[2,3],[[3,4]]]
const result = [];
for (value of list) {
  result.push(value.flat(Infinity));
}
console.log(result);

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2011-02-03
    • 2011-07-26
    • 2015-07-17
    • 2020-01-29
    • 2017-10-27
    • 2021-06-16
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多