2017-10-06 1 views
-2

Ich habe Array wie:neu anordnen Arraydaten mit einzelner Schleife

[{ 
 
    data: 3454 
 
    id: 1 
 
    index: 36 
 
    name: "Pension" 
 
}, { 
 
    data: 53453 
 
    id: 0 
 
    index: 36 
 
    name: "Pension" 
 
}, { 
 
    data: 6756 
 
    id: 1 
 
    index: 37 
 
    name: "Pension" 
 
}, { 
 
    data: 453 
 
    id: 2 
 
    index: 37 
 
    name: "Testval" 
 
}, { 
 
    data: 999 
 
    id: 2 
 
    index: 38 
 
    name: "Testval" 
 
}]

Wie kann, wie unten mit einzelner Schleife dieses Array neu anordnen? Ich muss die Daten neu zu ordnen wie:

'Pension': { 
 
    0: { 
 
    36: 53453 
 
    } 
 
    1: { 
 
    36: 3454, 
 
    37: 6756 
 
    } 
 
}, 
 
'Testval': { 
 
    2: { 
 
    37: 453 
 
    } 
 
},

ich mit Schlingen versucht, aber es 6-7 Schleifen haben. und ich muss mit weniger Schleife machen.

+0

Hausaufgaben? Zuordnung? –

+1

Bitte nehmen Sie sich etwas Zeit, um die Hilfeseite zu lesen, insbesondere die Abschnitte mit dem Namen ["Welche Themen kann ich hier fragen?"] (Http://stackoverflow.com/help/on-topic) und ["Welche Arten von Fragen sollten Ich vermeide es zu fragen? "] (Http://stackoverflow.com/help/dont-ask). Und, was noch wichtiger ist, lesen Sie bitte [die Checkliste für Stack Overflow-Fragen] (http://meta.stackexchange.com/q/156810/204922). Vielleicht möchten Sie auch etwas über [Minimale, vollständige und überprüfbare Beispiele] (http://stackoverflow.com/help/mcve) erfahren. –

+0

Warum unten abstimmen? –

Antwort

1

Sie könnten eine einzige Schleife mit Standardwerten für nicht angegebene Objekte verwenden. Weisen Sie später den Wert zu.

var array = [{ data: 3454, id: 1, index: 36, name: "Pension" }, { data: 53453, id: 0, index: 36, name: "Pension" }, { data: 6756, id: 1, index: 37, name: "Pension" }, { data: 453, id: 2, index: 37, name: "Testval" }, { data: 999, id: 2, index: 38, name: "Testval" }], 
 
    result = {}; 
 

 
array.forEach(function (o) { 
 
    result[o.name] = result[o.name] || {}; 
 
    result[o.name][o.id] = result[o.name][o.id] || {}; 
 
    result[o.name][o.id][o.index] = o.data; 
 
}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Mit einem dynamischeren Ansatz für beliebige verschachtelte Objekte.

var array = [{ data: 3454, id: 1, index: 36, name: "Pension" }, { data: 53453, id: 0, index: 36, name: "Pension" }, { data: 6756, id: 1, index: 37, name: "Pension" }, { data: 453, id: 2, index: 37, name: "Testval" }, { data: 999, id: 2, index: 38, name: "Testval" }], 
 
    result = {}; 
 

 
array.forEach(function (o) { 
 
    [o.name, o.id].reduce(function (r, k) { 
 
     return r[k] = r[k] || {}; 
 
    }, result)[o.index] = o.data; 
 
}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Danke @nina, möchte ich das gleiche tun. Du sparst meinen Tag :) –

0

Sie können dies mit einzelnen Schleife des Arrays erreichen, wie unten in java:

  1. erstellen Sie eine Klasse mit Feldern Index und Daten
  2. erstellen Karte als Karte als Karte
  3. iterieren ein Array und speichern der Wert in der Karte.

Ich denke, das ist der effektive Weg. Versuch es.