给出一个简单的嵌套数组数组,如下所示:
[
['a','b',],
['c','d'],
['e']
]
我希望将每个元素的值连接起来,并创建一个像这样的数组:
['.a.c.e','.a.d.e','.b.c.e','.b.d.e']
这只是一个简单的示例,但实际上可能有3个以上的嵌套数组以及其中的任意数量的元素。
似乎它应该相对简单,但是我只是无法绕开它,有人可以帮忙吗?
答案 0 :(得分:0)
由于数组长度未知,所以最好的方法是使用递归:
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))
或使用reduce
const input = [
['a','b',],
['c','d'],
['e']
]
console.log(
input.reduce((acc, a) => acc.flatMap(i1 => a.map(i2 => i1 + "." + i2)), [""])
)