我相信数组可以连接,然后使用自定义分隔符放入字符串中,如下所示:
var a1 = ["apple","orange"];
var a2 = ["hot", "cold"];
var a3 = a1.concat(a2);
var str = a3.join("_");
然而,结果将是:
apple_orange_hot_cold
我希望将a1的每个成员与相应的a2成员连接起来,其中通过数组中的顺序进行通信。假设a1中的成员数总是等于a2中的数。所以,我希望输出是一个如下所示的字符串:
apple_hot_orange_cold
实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
将数组与reduce
函数结合使用,而不是concat
:
var a1 = ["apple","orange"];
var a2 = ["hot", "cold"];
var str = a1.reduce(function(r, v, i) {
r.push(v, a2[i]);
return r;
},[]).join('_');
使用ES6语法的解决方案:
let str = a1.reduce((r, v, i) => [...r, v, a2[i]], []).join('_');
或map
的替代解决方案:
let str = a1.map((v, i) => `${v}_${a2[i]}`).join('_');
答案 1 :(得分:1)
如果有项目,我会迭代所有项目并将新数组与项目组合。
此解决方案适用于相等和不相等的数组长度。
{{1}}
答案 2 :(得分:0)
您可以使用简单的for
循环执行此操作:
var a1 = ["apple","orange"],
a2 = ["hot", "cold"],
str = "";
for (var i = 0; i < a1.length; i++)
str += (i === 0 ? "" : "_") + a1[i] + "_" + a2[i]
alert(str);
(i === 0 ? "" : "_")
部分只是检查我们是否在第一次迭代;如果我们这样做,这对前面没有任何补充,否则会增加额外的下划线。
答案 3 :(得分:0)
另一种选择:
var a1 = ["apple","orange"];
var a2 = ["hot", "cold"];
var a3 = [];
a1.forEach(function(a, i) {
[a, a2[i]].forEach(function(b) {
a3.push(b);
});
});
alert(a3.join('_'));
或者使用ES6语法,您可以将其作为一个超级干净的单行:
var a1 = ["apple","orange"];
var a2 = ["hot", "cold"];
var a3 = [];
a1.forEach((a, i) => [a, a2[i]].forEach((b) => a3.push(b)));
alert(a3.join('_'));