【问题标题】:javascript - merge array on keysjavascript - 在键上合并数组
【发布时间】:2016-06-01 20:29:56
【问题描述】:

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

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

如何组合(合并)这两个数组以获得如下结果:

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

谢谢!

【问题讨论】:

  • 您的第一个示例不是有效的 JavaScript。
  • 一开始你的意思是制作两个对象吗? { 0: 'f1', 1: 'f2' }?
  • 一不小心忘了加花括号:
  • 伙计们,他只是模拟了数据来给我们一个想法。这并不意味着他没有使用 JavaScript。

标签: javascript arrays merge


【解决方案1】:

如果您的输入是数组

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

尽管你没有要求它,但我已经包含了 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]]]), []);

【讨论】:

  • 你的 ES5 部分仍然使用箭头函数。反正似乎没必要。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    var array3 = [];
    
    l1 = array1.length;
    l2 = array2.length;
    
    len = (l1 > l2)? l2 : l1;
    
    var array3 = [];
    
    for(i = 0; i < len; i++){
      array3.push([array1[i],array2[i]));
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-15
      • 1970-01-01
      • 2018-06-17
      • 2021-12-03
      • 2020-07-22
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多