JavaScript映射到数组

4

我有以下3个数组:

arr1 = ['a', 'b', 'c'];
arr2 = ['y', 'j', 'k'];
arr3 = ['t', 'w', 'u'];
...

我想要将其映射到相同的数组:

arr = [
  'a-y-t',
  'a-y-w',
  'a-y-u',
  ..
  'c-k-w',
  'c-k-u'
]

我该如何做?

谢谢。


1
你尝试做什么了?你卡在哪里了? - Milan Tenk
3个回答

9
通过使用 flatMap,您可以实现想要的结果。以下是一种实现方式:

const arr1 = ['a', 'b', 'c'];
const arr2 = ['y', 'j', 'k'];
const arr3 = ['t', 'w', 'u'];

const result = arr1.flatMap(s=>arr2.flatMap(p=>arr3.flatMap(e=>`${s}-${p}-${e}`)));

console.log(result);


1
请注意,flatMap仅受2019年或之后发布的浏览器支持(来源)。 - Eric Wong

3
你可以使用一个算法来计算笛卡尔积,该算法可以获取任意数量的数组。最后将嵌套的数组转换为所需的格式。

const
    arr1 = ['a', 'b', 'c'],
    arr2 = ['y', 'j', 'k'],
    arr3 = ['t', 'w', 'u'],
    result = [arr1, arr2, arr3]
        .reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []))
        .map(a => a.join('-'));

console.log(result);


0

直截了当

const arr1 = ['a', 'b', 'c'];
const arr2 = ['y', 'j', 'k'];
const arr3 = ['t', 'w', 'u'];

let result = [];
arr1.forEach((list1)=> arr2.forEach((list2)=> arr3.forEach((list3)=>
                 result.push(`${list1}-${list2}-${list3}`)
               )
             )
          )

console.log(result);


你好Shubham!始终专注于写更少,实现更多。请查看其他已发布的答案。Map函数确实非常有帮助 :) - Pranav Rustagi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接