使用jQuery或underscore.js合并对象中多个数组的值

时间:2014-09-12 09:34:33

标签: javascript jquery arrays underscore.js

我想将一个对象中的多个数组的值合并到一个数组中。 例如:

Object:
  - alpha: Array[3]
     0: "vatG4d6mcjKbpfuAm"
     1: "xkQrKEsfwuYPkDcdz"
     2: "GDg9chZnDGrbLXWGS"
  - bravo: Array[1]
     0: "53LEcQ5MoYXFyvktf"
  - …

结果应为:

["vatG4d6mcjKbpfuAm", "xkQrKEsfwuYPkDcdz", "GDg9chZnDGrbLXWGS", "53LEcQ5MoYXFyvktf"]

我用一个简单的for循环迭代元素来做到这一点,但我关注性能。这可以通过简单的jQuery或underscore.js函数来实现吗?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:10)

没有必要使用库。

对于两个数组,请使用concat

var arr = obj.alpha.concat(obj.bravo);

对于两个以上的数组,使用循环:

再次使用concat

var arr = [];
for (var k in obj) {
  arr = arr.concat(obj[k]);
}

或使用push.apply方法

var arr = [];
for (var k in obj) {
  arr.push.apply(arr, obj[k]);
}

DEMO

使用此信息创建功能,因此您无需重复代码:

function mergeObjectArrays(obj) {
  var arr = [];
  for (var k in obj) {
    arr.push.apply(arr, obj[k]);
  }
  return arr;
}

var arr = mergeObjectArrays(obj);

答案 1 :(得分:4)

使用jquery,您可以使用merge

var newArray = $.merge(array1, array2);

使用下划线,您可以使用union

var newArray = _.union(array1, array2);

答案 2 :(得分:1)

你可以使用像这样的纯JavaScript来连接数组:

var obj =
{
    alpha: ["vatG4d6mcjKbpfuAm", "xkQrKEsfwuYPkDcdz", "GDg9chZnDGrbLXWGS"],
    bravo: ["53LEcQ5MoYXFyvktf"]
};
var obj.charlie = obj.alpha.concat(obj.bravo);

// obj.charlie = ["vatG4d6mcjKbpfuAm", "xkQrKEsfwuYPkDcdz", "GDg9chZnDGrbLXWGS", "53LEcQ5MoYXFyvktf"]