JavaScript Nested loop vermeidbar?

Hendoul

Commander
Registriert
Apr. 2008
Beiträge
2.054
Hi :)

Ich habe folgende Datenstruktur:
JSON:
[
   {
      x:[
         {
            y:[
               z:{
                  myProperty:1
               }
            ]
         }
      ]
   }
]

Gibt es hier eine bessere Variante als mehrere nested loops wie dieses Beispiel?
Javascript:
for (let i = 0; i < x.length; i++) {
    for (let j = 0; j < x[i].y.length; j++) {
        x[i].y[j].z.forEach(myObject => {
            myObject.somethingNew = aValueComputedOnOtherValuesOfMyObject;
        });
    }
}

Ich möchte lediglich ein neues property auf dem innersten Objekt anlegen, das auf einer Berechnung eines anderen Propertys beruht vom gleichen Objekt.

Gibt es hier eine funktionalere schönere Lösung?
 
Du meinst rekursiv sich nach unten hangeln? Und welches ganze in eine Funktion?
Falls du was mit Rekursion meinst, da habe ich noch mehr Mühe das zu verstehen als 3 verschachtelte Loops :D
 
Javascript:
var myObj = [
    {
        x: [
            {
                y: [
                    {
                        z: {
                            myProperty: 1
                        }
                    }
                ]
            }
        ]
    }
];

const fn_handleObj = (obj) => {
    if(typeof obj === 'object')
    {
        for(let i in obj)
        {obj[i] = fn_handleObj(obj[i]);}
    }
    else
    {obj = fn_changeProperty(obj);}
    return obj;
};
const fn_changeProperty = (prop) => {
    return prop * 2;
};

fn_handleObj(myObj);
 
  • Gefällt mir
Reaktionen: Hendoul
Wow, floq direkt mit einer kompletten javascript lösung :D. Hier das ganze nochmal in Ruby bzw. Pseudo-Code:
Code:
def find_the_stuff(iterable it)
  it.each do |thing|
    if thing.is_iterable?
      find_the_stuff(thing)
    else
      do_something_with(thing)
    end
 end
end
Ergänzung ()

PS.: Eine robustere Lösung ist vermutlich die Verwendung von DeepDash oder der allgemeineren Bibliothek Lodash.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: floq0r
Zurück
Oben