使用数组值将对象数组转换为对象

时间:2016-08-30 08:24:35

标签: javascript arrays object

嗨,我有一个像下面的对象数组

[{
    one:{
        a:1,
        b:2
    },
    two:{
        x:3,
        y:4
    }
},
{
    three:{
        i:5,
        j:8
    }
}]

我想要输出如下

{one:[a,b],
two:[x,y],
three:[i,j]}

我尝试过使用Object.keys,map等等。我很迷惑。任何人都可以建议我获得这个的最好方法。

3 个答案:

答案 0 :(得分:2)

我会使用reduceextend初始对象的值

function extend(target) {
    Array.prototype.slice.call(arguments, 1).forEach(function(source) {
        source && Object.getOwnPropertyNames(source).forEach(function(name) {
            if (typeof source[name] === 'object' && target[name]) {
                extend.call(target, target[name], source[name]);
            } else {
                target[name] = source[name];
            }
        });
    });

    return target;
}

var a = [{
    one:{
        a:1,
        b:2
    },
    two:{
        x:3,
        y:4
    }
},
{
    three:{
        i:5,
        j:8
    }
}];

var b = a.reduce(function (element, created) {
    return extend(created, element);
}, {});

console.log(b); //{three:[i:5,j:8], one:[a:1,b:2], two:[x:3,y:4]}

答案 1 :(得分:1)

  

使用数组缩减功能查看下面的响应,将现有数组减少为对象



var temp = [{
    one:{
        a:1,
        b:2
    },
    two:{
        x:3,
        y:4
    }
},
{
    three:{
        i:5,
        j:8
    }
}].reduce(function(obj , val){

Object.keys(val).forEach(function(subkey){
 
  obj[subkey] = [].concat(Object.keys(val[subkey]))


});return obj;

} , {});

console.log(temp)




答案 2 :(得分:0)

你我也尝试这种方法,其中source是输入:

source.map(function(item){
     var keys = Object.keys(item);

     return keys.reduce(function(p, c, index){
        var subKeys = Object.keys(item[c]);
        console.log(item[c]);
        p[c] = subKeys.map(function(subKey){
               var result = {};
               result[subKey] = item[c][subKey];

               return result;
        });            

        return p;
     }, {});
});