合并集合数组

时间:2015-08-04 07:16:13

标签: javascript arrays object underscore.js lodash

我正在寻找一种获取此阵列的方法。

[
  {
    "alpha": ['a', 'b', 'c'],
    "beta": ['d', 'e', 'f'] 
  },
  {
    "alpha": ['h', 'i', 'j'],
    "beta": ['k', 'l', 'm']  
  }
]

并将其转换为此对象。

{
  "alpha": ['a', 'b', 'c', 'h', 'i', 'j']
  "beta": ['d', 'e', 'f', 'k', 'l', 'm']  
}

优选使用lodash或下划线。最好的方法是什么?

6 个答案:

答案 0 :(得分:1)

如果您有规范数组和对象,请执行以下操作:

var arr = [
    {
        "alpha": ['a', 'b', 'c'],
        "beta": ['d', 'e', 'f']
    },
    {
        "alpha": ['h', 'i', 'j'],
        "beta": ['k', 'l', 'm']
    }
];

var obj = new Object();

arr.forEach(function(el) {
    for (key in el) {
        if (el.hasOwnProperty(key)) {
            if (!obj.hasOwnProperty(key)) {
                obj[key] = [];
            }
            obj[key] = obj[key].concat(el[key]);
        }
    }
});

console.log(obj);

答案 1 :(得分:1)

我会这样:

var or = [
  {
    "alpha": ['a', 'b', 'c'],
    "beta": ['d', 'e', 'f'] 
  },
  {
    "alpha": ['h', 'i', 'j'],
    "beta": ['k', 'l', 'm']  
  }
];

var res = {
    "alpha": _.union(or[0].alpha, or[1].alpha)
    "beta": _.union(or[0].beta, or[1].beta)
}

答案 2 :(得分:1)

一种简单的方法是在数组上使用concat方法,如下所示:

var array = [
  {
    "alpha": ['a', 'b', 'c'],
    "beta": ['d', 'e', 'f'] 
  },
  {
    "alpha": ['h', 'i', 'j'],
    "beta": ['k', 'l', 'm']  
  }
]

var mergedAlphaArray = array[0].alpha.concat(array[1].alpha);
var mergedBetaArray = array[0].beta.concat(array[1].beta);

这会将两个数组合并为一个。

答案 3 :(得分:0)

这是我用下划线想出来的。

var sets = [
  {
    "alpha": ['a', 'b', 'c'],
    "beta": ['d', 'e', 'f'] 
  },
  {
    "alpha": ['h', 'i', 'j'],
    "beta": ['k', 'l', 'm']  
  }
]

var full = _.mapObject(sets[0], function (set, key) {
  var result =  _.chain(sets)
  .map(function(set){
    return _.chain(set)
    .pick(key)
    .values()
    .value()
  })
  .value()
  return _.flatten(result)
})

console.log(full)

答案 4 :(得分:0)

这里是genaric解决方案,适用于动态数组长度。

var arr = [
    {
        "alpha": ['a', 'b', 'c'],
        "beta": ['d', 'e', 'f']
    },
    {
        "alpha": ['h', 'i', 'j'],
        "beta": ['k', 'l', 'm']
    }
];

 function merge(data) {
  var alphaArr = [],
      betaArr = [];
  for (var i = 0; i < arr.length; i++) {
      Array.prototype.push.apply(alphaArr, arr[i].alpha);
      Array.prototype.push.apply(betaArr, arr[i].beta);
  }
  return {
      "alpha": alphaArr,
      "beta": betaArr
     }
  }

答案 5 :(得分:0)

如果你寻找一个jQuery版本......

var finals = [];
$.each(test, function(k, v) {
    $.each(v, function(key, val) {
        if(finals[key] == undefined) {
            finals[key] = val;
        } else {
            finals[key] = finals[key].concat(val);
        }
    });
});
console.log(finals);

这不指定数组键的名称,这提供了灵活性。

工作演示:JSFiddle