我正在寻找一种获取此阵列的方法。
[
{
"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或下划线。最好的方法是什么?
答案 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