javascript'te çok boyutlu dizi içeren nesneleri düzleştirme

İçinde nesneleri olan çok boyutlu bir dizim var. Nasıl düzleştirebilirim?

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"}     
               ];
1
concat 'a göz atın. buradaki .
katma yazar Matt Fenwick, kaynak
düzleştirici çok boyutlu bir diziyi düzleştirmek anlamına gelir - bunun bir boyutlu dizisini yaratın - Yani, karışıklık için özür dilerim. Örneğin, dizilim tüm nesneleri artan sırada içeriyordu.
katma yazar learner, kaynak

1 cevap

Bence yapmaya çalıştığın şey bu.

Öncelikle iki nesneyi birleştirmek için basit bir yardımcı fonksiyon istersiniz:

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

Ardından nesneleri birleştirmek için dizilerinizin dizisini değiştirebilirsiniz:

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]);

Ve sonra sırala:

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

Demo (run with your JavaScript console open): http://jsfiddle.net/ambiguous/twpUF/

Referanslar:

2
katma
teşekkürler bu harika bir cevap
katma yazar learner, kaynak