如何采用两个字符串数组来构建一个将它们全部组合在一起的数组?
2017-07-20
91
我有一个零件编号数组,
['PCI-33', 'GG-34', 'GG-32']
我有一个区域数组,
['UK', 'US', 'CA', 'MX']
等。
我试图将这两个数组合并起来,这样就可以得到如下结果:
['PCI-33-UK', 'GG-34-UK', 'GG-32-UK', 'PCI-33-US', 'GG-34-US', ..., 'GG-32-MX']
有什么有效的方法可以做到这一点?
3个回答
使用 2 个嵌套 Array#map 创建并组合两个数组,然后应用 Array#concat 展平结果:
var strs1 = ['PCI-33', 'GG-34', 'GG-32'];
var strs2 = ['UK', 'US', 'CA', 'MX'];
var result = [].concat.apply([], strs1.map(function(str1) {
return strs2.map(function(str2) {
return str1 + '-' + str2;
});
}));
console.log(result);
ES6 版本使用 Array#concat 和 扩展语法 展平子数组,并使用 模板文字 来创建字符串。
var strs1 = ['PCI-33', 'GG-34', 'GG-32'];
var strs2 = ['UK', 'US', 'CA', 'MX'];
var result = [].concat(...strs1.map((str1) => strs2.map((str2) => `${str1}-${str2}`)));
console.log(result);
Ori Drori
2017-07-20
笛卡尔积 是这种组合类型的数学术语。
如果您不习惯使用“更花哨”的数组方法,一种简单的方法是使用嵌套的
for
循环:
var parts = ['PCI-33', 'GG-34', 'GG-32'],
zones = ['UK', 'US', 'CA', 'MX'];
var combined = [];
for(var i = 0; i < parts.length; i++) {
for(var j = 0; j < zones.length; j++) {
combined.push(parts[i] + "-" + zones[j]);
}
}
然后
combined
将包含
["PCI-33-UK", "PCI-33-US", "PCI-33-CA", "PCI-33-MX", "GG-34-UK", "GG-34-US", "GG-34-CA", "GG-34-MX", "GG-32-UK", "GG-32-US", "GG-32-CA", "GG-32-MX"]
Peter Olson
2017-07-20
带有 1 个循环的 ES-1999 代码:
var codes = ['PCI-33', 'GG-34', 'GG-32'];
var zones = ['UK', 'US', 'CA', 'MX'];
var arr = [];
var cl = codes.length;
for (var i=0; i < cl * zones.length; i++) {
arr.push(codes[i % cl] + "-" + zones[Math.floor(i / cl)]);
}
console.log(arr);
James
2017-07-20