2016-10-18 1 views
0

Ich habe ein geschachteltes Objekt, das ich über geschachtelte Ebene in diesem Objekt nicht weiß und für jetzt möchte ich alle Eigenschaften davon in Pfade wie prop.prop[0].prop konvertieren danach sollte ich alle Themen in einem Array speichern.Wie erstellt man Pfad mit Punktnotation von Objekt?

nested_obj = { 
    name: 'Saeid', 
    images: [ { format: 'jpg', id: 23 }, { format: 'png', id: 30 }], 
    ids: [ 2111, { id: [ 222, 'library'] } ] 
} 

paths_array = [ 'name', 'images[0].format', 'images[0].id', 'images[1].format', 'images[1].id' ] 

Wie kann ich das erreichen? Ich habe eine Lösung, wie unter dem nicht für ids[1].id[0]

var make_path; 

make_path = function(obj) { 
    var Deep; 
    Deep = function(o, paths, preKey) { 
    var arrayKey, i, j, k, keys, l, len, ref, v; 
    if (paths == null) { 
     paths = []; 
    } 
    if (Array.isArray(o)) { 
     for (i = j = 0, ref = o.length - 1; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) { 
     if (typeof o[i] !== 'object') { 
      paths.push(preKey + "[" + i + "]"); 
      Deep(o[i], paths, preKey); 
     } else { 
      console.log(o[i]); 
      arrayKey = preKey + "[" + i + "]"; 
      Deep(o[i], paths, arrayKey); 
     } 
     } 
    } else if (o instanceof Object) { 
     keys = Object.keys(o); 
     for (v = l = 0, len = keys.length; l < len; v = ++l) { 
     k = keys[v]; 
     if (typeof o[k] !== 'object') { 
      if (preKey != null) { 
      paths.push(preKey + "." + k); 
      } else { 
      paths.push(k); 
      } 
     } 
     Deep(o[k], paths, k); 
     } 
    } 
    return console.log(paths); 
    }; 
    return Deep(obj); 
}; 
+0

Werfen Sie einen Blick auf [schnellstem Weg/un-abflachen zu glätten verschachtelte JSON-Objekte] (http://stackoverflow.com/q/19098797/1048572) – Bergi

Antwort

0

Arbeit habe ich die NPM-Bibliothek verwenden dot-object für diese sehr oft. Es hat eine einfache API und kann zum Serialisieren und Deserialisieren zu dot Strings verwendet werden. Es kann auch in Knoten-Apps oder im Browser verwendet werden.

https://www.npmjs.com/package/dot-object

Verwandte Themen