按给定顺序混合两个数组[重复]

问题描述 投票:0回答:1

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'

javascript arrays sorting merge concatenation
1个回答
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' ]

© www.soinside.com 2019 - 2024. All rights reserved.