【发布时间】:2016-06-11 02:29:41
【问题描述】:
有 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 works in this case 的方式,而且由于重复问题中的答案使用了丑陋的嵌套循环,我认为 reduce 会有所帮助吗?
更新 2
String.raw 可能会被滥用以将字符串压缩:
String.raw({ raw: '123 ' }, 4, 5, 6)
// => '142536'
【问题讨论】:
-
这个函数通常叫做
zip,它不是JS内置的,但是很容易实现——见here。您需要使用[].concat.apply([], zip(arrays))将压缩结果展平 -
@georg 呃,不...我只需要一个数组作为结果...这不是
zip;) -
是的,刚刚意识到,重新打开并编辑了评论。 ^^^^
-
是的,看到了......无论如何,这比 just
concat/sort更加矫枉过正:P -
你不能在这里使用 .sort() ,因为你想要的顺序与值本身无关,它与值的来源有关。只需将您显示的循环放入函数中并继续 - 在添加一些长度检查以防输入数组具有不同长度之后。
标签: javascript arrays sorting merge concatenation