javascript - 合并键上的数组

时间:2016-06-01 20:29:57

标签: javascript arrays merge

对不起,如果重复,但我找不到合适的答案。我有两个数组:

array1 = { '0': 'f1', '1': 'f2'};
array2 = { '0': 's1', '1': 's2'};

如何组合(合并)这两个数组来得到这样的结果:

array3 = [['f1', 's1'], ['f2', 's2']];

谢谢!

3 个答案:

答案 0 :(得分:3)

如果您的输入是数组

var a = ['f1', 'f2'];
var b = ['s1', 's2'];

您正在寻找的转型是zip

var zip = (xs,ys)=>
  xs.reduce((zs,x,i)=>
    zs.concat([[x, ys[i]]]), []);

zip(a,b);
//=> [['f1', 's1'], ['f2', 's2']]

这假设两个输入的长度相同。

如果您的输入是带有数字键的对象

var a = {'0': 'f1', '1': 'f2'};
var b = {'0': 's1', '1': 's2'};

var zipObj = (xs,ys)=>
  Object.keys(xs).reduce((zs,xk)=>
    zs.concat([[xs[xk], ys[xk]]]), []);

zipObj(a,b);
//=> [['f1', 's1'], ['f2', 's2']]

尽管你没有要求它,但是要求Trey我已经包含 ES5 版本的功能

"use strict";

// zip arrays
var zip = (xs,ys)=>
  xs.reduce((zs,x,i)=>
    zs.concat([[x, ys[i]]]), []);

// zip objects
var zipObj = (xs,ys)=>
  Object.keys(xs).reduce((zs,xk)=>
    zs.concat([[xs[xk], ys[xk]]]), []);

答案 1 :(得分:0)

假设您在问题中意外添加了索引并且没有使用其他一些数据类型...最简单的方法是我想象的for循环:

var newArray = [];
for(var i in array1){
  newArray[i] = [array1[i], array2[i]];
}

编辑:这将适用于长度相等的对象或数组。

答案 2 :(得分:0)

如果您确定两个阵列的长度相等,请使用Trey的解决方案。否则,请使用:

config.vm.define "centos6", autostart: false , primary: false do |centos6|