我想将一个对象中的多个数组的值合并到一个数组中。 例如:
Object:
- alpha: Array[3]
0: "vatG4d6mcjKbpfuAm"
1: "xkQrKEsfwuYPkDcdz"
2: "GDg9chZnDGrbLXWGS"
- bravo: Array[1]
0: "53LEcQ5MoYXFyvktf"
- …
结果应为:
["vatG4d6mcjKbpfuAm", "xkQrKEsfwuYPkDcdz", "GDg9chZnDGrbLXWGS", "53LEcQ5MoYXFyvktf"]
我用一个简单的for循环迭代元素来做到这一点,但我关注性能。这可以通过简单的jQuery或underscore.js函数来实现吗?
非常感谢任何帮助。
答案 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]);
}
使用此信息创建功能,因此您无需重复代码:
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"]