如何在 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。
我正在编写一个简单的 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。