按顺序加入两个数组的成员

时间:2016-03-03 16:35:29

标签: javascript

我相信数组可以连接,然后使用自定义分隔符放入字符串中,如下所示:

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

实现这一目标的最佳方法是什么?

4 个答案:

答案 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('_'));