如何在 ES5 中使用 map 基于另外两个数组形成一个字符串数组?

How to form one string array based on two other arrays using map in ES5?

我正在编写一个简单的 js/es5 脚本来组合 CWL 中的所有字符串。 CWL只支持ES5,所以ES6的很多functions/features无法使用。本人对js总体不熟悉

举个最简单的例子:

var arr1 = ["a", "b"]
var arr2 = ["111", "222"]

预期结果:

["a_111", "b_111", "a_222", "b_222"] // order doesn't matter

我试过这种方法,但是没有用,只返回了[a_111", "b_111"]

arr1.map(function(x) {
  return arr2.map(function(y) {
    return x + "_" + y;
  });
});

我不会为此使用 map。只是有一个嵌套循环并将一个字符串推入一个新数组。

var arr1 = ['a', 'b'];
var arr2 = ['111', '222'];

var out = [];

for (var i = 0; i < arr2.length; i++) {
  for (var j = 0; j < arr1.length; j++) {
    var str = arr1[j] + '_' + arr2[i];
    out.push(str);
  }
}

console.log(out);

您可以使用 reduce()concat()map() 的组合:

let result = arr1.reduce((acc, a) => acc.concat(arr2.map((b) => a + "_" + b)), []);
// => [ 'a_111', 'a_222', 'b_111', 'b_222' ]

或者当 flat() 可用时,您可以使用:

let result = arr1.map((a) => arr2.map((b) => a + "_" + b)).flat();
// => [ 'a_111', 'a_222', 'b_111', 'b_222' ]

不过我不确定 flat() 是否适用于 ES5。