как сгладить многомерный массив, содержащий объекты в javascript

#javascript #arrays #object #flatten

#javascript #массивы #объект #сгладить

Вопрос:

У меня есть многомерный массив с объектами в нем .. Как я могу его сгладить

 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. сгладить означает сгладить многомерный массив — сделать из него одномерный массив — я имею в виду, извините за путаницу. например, мой массив, содержащий все объекты в порядке возрастания.

2.Посмотрите concat здесь.

Ответ №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 /

Ссылки: