按给定顺序混合两个数组

时间:2016-02-27 22:08:01

标签: javascript arrays sorting merge concatenation

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]

但是,我刚问过我是否可以使用任何内置方法完成。首先我考虑了concatsort,但感觉就像 overkill (与循环和性能相反)......

a.concat(b).sort(doItRight)

更具体一点,这些数组可能包含stringsnumbers ......

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'

1 个答案:

答案 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' ]