2016-11-22 2 views
1
function read(a) { 
    var key = Object.keys(a)[0]; 
    if (!key) { 
     return {} 
    } else if (!key.includes(";")) { 
     var inkey = a[key]; 
     delete a[key] 
     return read(Object.assign({}, inkey, a)) 
    } else { 
     console.log(key) 
     delete a[key] 
     return read(a); 
    } 
} 

var locations = { 
    "buildings":{ 
     "3;":{"name":"Market"}, 
     "8;":{"name":"Free car"}, 
     "9;":{"name":"House"} 
    }, 
    "people":{ 
     "males":{ 
      "16;":{ 
       "name":"John", 
       "items":{ 
        "food":1, 
        "water":1 
       } 
      } 
     } 
    } 
} 
read(locations); 

Die Funktion read(locations) funktioniert wie erwartet und gibt jede Zahl aus.Vorherige Tasten merken?

Wie würde ich herausfinden, was einer bestimmten Nummer am nächsten kommt, einschließlich der vorherigen Tasten?

Zum Beispiel: Wenn die nächste Sache einer Zahl "John" (Nummer 16) ist, muss ich auch, dass das Objekt in "Männer" & "Menschen" ist, nicht nur alles "in" der Nummer.

Ich könnte eine ähnliche Funktion zu read() zu bekommen, was auch immer "nach" der Zahl ist (so dass Name und Elemente, wenn es existiert), obwohl ich die vorherigen Schlüssel erinnern möchte.

+0

bitte auf den entsprechenden fehlenden Code als auch, und einige Beispiele für Input und Output wollte hinzufügen, haben Sie vielleicht einen Blick hier: [MCVE] –

+0

@NinaScholz Es gibt keine fehlenden Code? Ich habe "read (locations)" hinzugefügt und die Koordinaten in Zahlen und die "spot" -Funktion in ein "console.log" geändert, damit Sie es sehen können - aber der Code ist genau derselbe. – user1768788

+0

wo überprüfen Sie auf Nähe? –

Antwort

0

Sie könnten eine Variable für den Pfad zum Objekt hinzufügen.

function read(a, path) { 
 
    if (!a || typeof a !== 'object') { 
 
     return {}; 
 
    } 
 
    Object.keys(a).forEach(function (key) { 
 
     if (key.includes(";")) { 
 
      console.log(key, path.join(', ')); 
 
      return read(a[key], path || []); 
 
     } 
 
     read(a[key], (path || []).concat(key)); 
 
    }); 
 
} 
 

 
var locations = { buildings: { "3;": { name: "Market" }, "8;": { name: "Free car" }, "9;": { name: "House" } }, people: { males: { "16;": { name: "John", items: { food: 1, water: 1 } } } } }; 
 

 
read(locations);

Verwandte Themen