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
,但这感觉就像是过度杀伤(与循环和表演相比)...
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 在这种情况下的工作方式,并且由于重复问题中的答案使用丑陋的嵌套循环,我认为 reduce 可以有所帮助?
更新2
String.raw
可以被滥用来 zip 串在一起:
String.raw({ raw: '123 ' }, 4, 5, 6)
// => '142536'
没有内置功能,但有更多功能性的方法可以做到这一点。通常,如果我有一个“创建一个数组,然后循环某些内容并附加到数组”形式的工作解决方案,我会使用
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' ]