【问题标题】:how to flatten multidimensional array containing objects in javascript如何在javascript中展平包含对象的多维数组
【发布时间】:2011-12-17 00:30:52
【问题描述】:

我有一个包含对象的多维数组..我怎样才能展平它

myarr[0] =[{"name":"john","age":"50","location":"san diego"}
           ,{"name":"jane","age":"25","location":"new york"}
           ,{"name":"susane","age":"10","location":"los angeles"}     
               ];
myarr[1] =[{"smoker":"yes","drinker":"no","insured":"no"}
           ,{"smoker":"no","drinker":"no","insured":"yes"}
           ,{"smoker":"no","drinker":"yes","insured":"no"}     
               ];
myarr[1] =[{"status":"married","children":"none"}
           ,{"status":"unmarried","children":"one"}
           ,{"status":"unmarried","children":"two"}     
               ];

【问题讨论】:

  • flatten 意味着将一个多维数组展平——制作它的一维数组——我的意思是,很抱歉造成混淆。例如,我的数组是否会按升序包含所有对象。
  • 查看concat here

标签: javascript arrays object flatten


【解决方案1】:

我认为这就是你想要做的。

首先你需要一个简单的辅助函数来合并两个对象:

function merge(a, b) {
    a = a || { };
    for(var k in b)
        if(b.hasOwnProperty(k))
            a[k] = b[k];
    return a;
}

然后你可以循环遍历你的数组来合并对象:

var flat = [ ];
for(var i = 0; i < myarr.length; ++i)
    for(var j = 0; j < myarr[i].length; ++j)
        flat[j] = merge(flat[j], myarr[i][j]);

然后排序:

flat.sort(function(a, b) {
    a = a.location;
    b = b.location;
    if(a < b)
        return -1;
    if(a > b)
        return 1;
    return 0;
});

演示(在 JavaScript 控制台打开的情况下运行):http://jsfiddle.net/ambiguous/twpUF/

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    相关资源
    最近更新 更多