Javascript lodash -_ difference function verwenden, wenn in einem objekt mehrere objekte vorhanden sind?

... komplette Frage anzeigen

1 Antwort

Wo kommt diese Datenstruktur her? Normalerweise ist es so dass man den key in einem objekt (deswegen heißt es key/schlüssel) kennt wenn man auf den Wert zugreifen möchte. Wenn du nicht gerade für deine language objekte (also {language: "en"} oder {language: "de"}) einen Suchindex baust (in diesem fall würdest du den key kennen), dann ist die Datenstruktur mit dem kürzel (it, de, en) als Key echt ungeeignet.


Wie dem auch sei, du könntest "_.differenceBy" benutzen. Du gibst nach den beiden arrays die du vergleichen möchtest einfach eine anonyme funktion an die mit jedem Element (ich hab es jetzt "obj") genannt aus "languages1" und "languages2" aufgerufen wird und den Wert zurückgibt der dann von "_.difference" verwendet wird.Da wir die keys leider vorher nicht kennen schauen wir mit ` var languageObj = obj.it || obj.de || obj.en;`welcher davon überhaupt da ist. Das funktioniert natürlich nur wenn du die sprachkürzel vorher kennst. In jedem anderen Fall solltest du von dieser Datenstruktur aber auch abstand nehmen ;)


_.differenceBy(languages1, languages2, function (obj) {
var languageObj = obj.it || obj.de || obj.en;
return languageObj.language;
})

Wenn jetzt "languages1" und "languages2" das hier enthält:

[
{
"it": {
"language": "it",
}
},
{
"de": {
"language": "de",
}
},
{
"en": {
"language": "en",
}
}
]


dann ist das Ergebnis von differenceBy wie erwartet ein leeres Array [], weil sie gleich sind.


Warum benutzt du nicht einfach so eine Datenstruktur?:

[  {      "language": "it",  },  {      "language": "de",  },  {      "language": "en",  }]
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von perhp
13.08.2016, 19:14

Hallo, danke für deine Hilfe, diese Knoten habe ich mir von einem anderen Objekt selbst zusammenerstellt. Habe jetzt nochmal die Struktur überarbeitet, wo es nun eigentlich einfacher sein müsste, die  _difference funktion von lodash anzuwenden. Dort wo der language key steht können noch viel mehr Sachen stehen, da dort bei mir die ganzen Konstanten hinterlegt werden für die Webseite. (Habe nur die restlichen entfernt, damit es einfacher zu verstehen ist).

{
"nl": {
"language": "nl",
},
"it": {
"language": "it",
},
"en": {
"language": "en",
},
"de": {
"language": "de",
}
}

Wie kann ich nun die Unterschiede von den jeweiligen key´s herausfinden, die innerhalb dieser Objekte liegen? Wenn ich es statisch machen würde wie hier unten, dann würde es klappen. Ich möchte es aber dynamisch machen, also dass er die Knoten hineinschreiben soll, die auch vorhanden sind.( ps: constants ist bei mir die variable die, wo die ganzen Sprachen abgespeichert sind - siehe oben)

_.difference(

_.keys(constants['de']),

_.keys(constants['it]),

_.keys(constants['en'])

)

0