【问题标题】:How can I convert multidimensional array into 2 dimensions array?如何将多维数组转换为二维数组?
【发布时间】:2020-11-23 19:59:14
【问题描述】:

给定多维数组(任意大小和深度):

const multidimensionalArray = [1, [2, [3, [4, [5]]]], [6], [7, [8], [9]]];

我需要按照下面的示例将其转换为二维数组(想法是每个嵌套值都应转换为所有父项+此值的数组)。

预期的二维数组:

const twoDimensionsArray = [
  [1],
  [1, 2],
  [1, 2, 3],
  [1, 2, 3, 4],
  [1, 2, 3, 4, 5],
  [1, 6],
  [1, 7],
  [1, 7, 8],
  [1, 7, 9],
];

你能帮我解决这个问题吗?

【问题讨论】:

  • @GuerricP,关于维度,你是对的,已经更新了描述。 “奇怪的数字”可能是任何类型的,没关系。
  • 如果数据可以是任何类型的标准是什么?使用可复制+可粘贴的示例很有帮助,1.1.* 无效。
  • @Phix 我将更新示例...但想法是每个嵌套值都应转换为所有父级+此值的数组,例如:[1] => [ [ 1]]; [1, [2] ] => [ [1], [1, 2] ]; [1, [2], [3]] => [[1], [1, 2], [1, 3]] ...
  • 请附上您对该主题所做的任何研究以及基于该研究所做的任何尝试。见How to Ask

标签: javascript arrays lodash


【解决方案1】:

对每个嵌套数组的recursive 调用应该可以解决问题。

注意:对于您的用例,以下内容可能不完整 - 您的数据需要按特定顺序才能正常工作 - 但我认为这应该足够干净,例如:

const customFlatten = (arr, parents = [], output = []) => {
  for (const item of arr) {
    // If not an array...
    if (!Array.isArray(item)) {
      parents.push(item) // update parents for recursive calls
      output.push(parents.slice(0)) // add entry to output (copy of _parents)

    // If an array...
    } else {
      customFlatten(item, parents.slice(0), output) // recursive call
    }
  }
  return output
}

console.log(customFlatten([1, [2, [3, [4, [5]]]], [6], [7, [8], [9]]]))

【讨论】:

猜你喜欢
  • 2019-07-09
  • 2012-08-15
  • 1970-01-01
  • 2011-07-05
  • 2015-07-16
  • 1970-01-01
  • 2016-02-18
  • 2018-02-19
相关资源
最近更新 更多