javascript是否有任何内置方法是否可以按照相同的顺序合并/组合两个数组?这是一个基本上简单的任务,可以通过迭代两者的最小长度并将每个值添加到新数组来解决:
var a = [1, 2, 3]
var b = [4, 5, 6]
var c = []
for (var i = 0; i < 3; i++) {
c.push(a[i])
c.push(b[i])
}
// => [1, 4, 2, 5, 3, 6]
但是,我刚问过我是否可以使用任何内置方法完成。首先我考虑了concat
和sort
,但感觉就像 overkill (与循环和性能相反)......
a.concat(b).sort(doItRight)
更具体一点,这些数组可能包含strings
和numbers
......
var a = [0, '1', 'c']
var b = ['d', 4, 'f']
var c = [0, 'd', '1', 4, 'c', 'f']
有什么想法或想法吗?
更新
忘记注意输入数组可能超过两个。我真的很喜欢reduce works in this case,并且由于重复问题中的答案使用丑陋的嵌套循环,我认为reduce可以帮助吗?
更新2
有String.raw
可能会滥用压缩字符串:
String.raw({ raw: '123 ' }, 4, 5, 6)
// => '142536'
答案 0 :(得分:0)
没有内置功能,但有更多功能方法可以做到这一点。通常情况下,如果我有一个“创建数组,然后遍历某个数据并附加到数组”形式的工作解决方案,我会转而使用reduce
。您可以使用zip
定义reduce
函数,如下所示:
const zip = (a,b) => a.reduce( (c,x,i) => c.concat(x, b[i]), [] );
以下是演示:
const zip = (a, b) => a.reduce((c, x, i) => c.concat(x, b[i]), []);
const a = [1, 2, 3];
const b = [4, 5, 6];
console.log( zip([1, 2, 3], [4, 5, 6]) );
//=> [ 1, 4, 2, 5, 3, 6 ]
console.log( zip([0, '1', 'c'], ['d', 4, 'f']) );
//=> [ 0, 'd', '1', 4, 'c', 'f' ]