首页 > 解决方案 > 将嵌套数组元素转换为字符串数组

问题描述

给定一个简单的嵌套数组数组,如下所示:

[
  ['a','b',],
  ['c','d'],
  ['e']
]

我正在寻找连接每个元素的值并创建一个像这样的数组:

['.a.c.e','.a.d.e','.b.c.e','.b.d.e']

这只是一个简单的示例,但实际上可能有超过 3 个嵌套数组和其中的任意数量的元素。

似乎它应该相对简单,但我就是无法绕开它,有人可以帮忙吗?

标签: javascript

解决方案


由于数组长度未知,最好的方法是使用递归:

function conc(input) {
  const output = [];
  function _conc(input, partial) {
    if (input.length === 0) {
      return output.push(partial);
    }
    const [first, ...rest] = input;
    first.forEach(itm => {
      _conc(rest, partial + "." + itm)
    });
  }
  _conc(input, "");
  return output;
}

const input = [
  ['a','b',],
  ['c','d'],
  ['e']
]

console.log(conc(input))

或与flatMap

function conc(input) {
  const [first, ...rest] = input;
  return rest.length === 0
    ? first.map(itm => "." + itm)
    : first.flatMap(itm => conc(rest).map(_itm => "." + itm + _itm));
}

const input = [
  ['a','b',],
  ['c','d'],
  ['e']
]

console.log(conc(input))

或减少:

const input = [
  ['a','b',],
  ['c','d'],
  ['e']
]

console.log(
  input.reduce((acc, a) => acc.flatMap(i1 => a.map(i2 => i1 + "." + i2)), [""])
)


推荐阅读