在对象数组中生成相同类型的所有元素

Gov*_*iya 1 javascript arrays jquery object

我有一个对象数组

var arr = 
[
    {"shares":50,"comments":10},
    {"likes":40,"shares":30},
    {"comments":10}
];
Run Code Online (Sandbox Code Playgroud)

我想把它转换成

var arr = 
[
    {"shares":50,"comments":10,"likes":0},
    {"likes":40,"shares":30,"comments":0},
    {"comments":10,"likes":0,"shares":0}
]
Run Code Online (Sandbox Code Playgroud)

属性不是固定数字,名称会有所不同,请参阅另一个示例

var arr2 = [{"a":1},{"b":2},{"c":3},{"d":4},{"e":5},{"f":6}]
Run Code Online (Sandbox Code Playgroud)

至

var arr2 = [{"a":1,"b":0,"c":0,"d":0,"e":0,"f":0},{"a":0,"b":1,"c":0,"d":0,"e":0,"f":0},{"a":0,"b":0,"c":1,"d":0,"e":0,"f":0},{"a":0,"b":0,"c":0,"d":1,"e":0,"f":0},{"a":0,"b":0,"c":0,"d":0,"e":1,"f":0},{"a":0,"b":0,"c":0,"d":0,"e":0,"f":1}]
Run Code Online (Sandbox Code Playgroud)

我可以通过迭代每个元素的数组和键的所有元素但我不知道,这是最好的方法吗?

JavaScript或jQuery中是否有任何内置函数?

paw*_*wel 6

您可以使用http://api.jquery.com/jquery.extend/

var defaults = { "shares" : 0, "comments" : 0, "likes" : 0 };

arr = $.map( arr, function( item ){
    return $.extend( {}, defaults, item ); 
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/L74q3ksw/

编辑重新:更新的问题

现在这是构建defaults对象的问题,据我所知,该对象具有来自阵列中所有元素的所有唯一键.

所以,给定

var arr2 = [{"a":1},{"b":2},{"c":3},{"d":4},{"e":5},{"f":6}]
Run Code Online (Sandbox Code Playgroud)

你需要提取"a","b","c","d"等等并创建defaults.

var defaults = {};
// collect all the keys and set them with value = 0 in defaults
arr2.forEach( function( item ){ 
    Object.keys( item ).forEach( function( key ){
        defaults[ key ] = 0;
    });
});

// same as the previous solution
arr2 = $.map( arr2, function( item ){
        return $.extend( {}, defaults, item ); 
    });
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/7dtfzg2f/2/