Estoy escribiendo un script js/es5 simple para combinar todas las cadenas en un CWL. El CWL solo es compatible con ES5, por lo que hay muchas funciones/características de ES6 que no se pueden usar. No estoy familiarizado con js en general.
Para un ejemplo mínimo:
var arr1 = ["a", "b"] var arr2 = ["111", "222"]Resultado Esperado:
["a_111", "b_111", "a_222", "b_222"] // order doesn't matterLo intenté de esta manera, pero no funcionó y solo devolvió ["a_111", "b_111"]
arr1.map(function(x) { return arr2.map(function(y) { return x + "_" + y; }); });No me molestaría en usar el map para esto. Solo tenga un bucle anidado y empuje una cadena en una nueva matriz.
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);Lo que puede usar es una combinación de reduce() , concat() y map() :
let result = arr1.reduce((acc, a) => acc.concat(arr2.map((b) => a + "_" + b)), []); // => [ 'a_111', 'a_222', 'b_111', 'b_222' ] Alternativamente, cuando flat() está disponible, puede usar:
let result = arr1.map((a) => arr2.map((b) => a + "_" + b)).flat(); // => [ 'a_111', 'a_222', 'b_111', 'b_222' ] Sin embargo, no estoy seguro de si flat() funciona con ES5.