key:value in Objekt finden
bearbeitet von Matthias FuldeHallo ebody,
dass deine Objekt-Representation der key-value Paare nicht optimal ist, hat Rolf ja schon geschrieben, ebenso zur Problematik mit der case sensitivity.
Was mir darüber hinaus noch auffällt ist, dass dein Array `searchKeyValuePair` doppelte Einträge enthält. Entspricht das deinen Daten oder oder sind die key-value Paare in Wirklichkeit eindeutig?
Falls du wie in deinem Beispiel doppelte Einträge haben solltest und dann, wie von Rolf vorgeschlagen, `filter` auf dem Array `searchKeyValuePair` aufrufen und checken würdest, ob der jeweilige Eintrag in dem Objekt `inThisObject` vorhanden ist, würdest du Einträge gegebenenfalls mehrfach zählen, was du vermutlich nicht möchtest.
Für dein konkretes Beispiel würdest du 3 Treffer bekommen, da das Paar (Title, Prometheus) doppelt gezählt wird.
Für diesen Ansatz müsstest du also zunächst sicherstellen, dass die key-value Paare höchstens einmal vorkommen.
Was die effizientest Art ist, Duplikate zu entfernen, kann ich nicht sagen. Eine quick-and-dirty Lösung wäre eventuell, die Objekte in Arrays `['key', 'value']` umzuwandeln (beachte was Rolf dazu geschrieben hat), und dann einen String-Vergleich zu machen:
```js
const queryEntries = new Set(arrSearchKeyValuePairs.map(entry => {
return entry.toString()
}))
const result = Object.entries(inThisObject).filter(entry => {
return queryEntries.has(entry.toString())
})
const count = result.length
```
Da Arrays in JavaScript auch nur Objekte sind, ergibt der Vergleich zwischen zwei verschiedenen Arrays immer `false`, selbst wenn sie den gleichen Inhalt haben. Nimmt man hingegen die String-Representation der Arrays, dann werden beim Einfügen in das `Set` die doppelten Einträge entfernt.
Allerdings gibt es vermutlich bessere Lösungen für das Problem. Im Idealfall solltest du wenn möglich dafür sorgen, dass erst gar keine Duplikate in deiner Datenstruktur auftauchen (beim Einfügen der key-value Paare prüfen, ob das Paar schon vorhanden ist).
Viele Grüße,
Matthias
key:value in Objekt finden
bearbeitet von Matthias FuldeHallo ebody,
dass deine Objekt-Representation der key-value Paare nicht optimal ist, hat Rolf ja schon geschrieben, ebenso zur Problematik mit der case sensitivity.
Was mir darüber hinaus noch auffällt ist, dass dein Array `searchKeyValuePair` doppelte Einträge enthält. Entspricht das deinen Daten oder oder sind die key-value Paare in Wirklichkeit eindeutig?
Falls du wie in deinem Beispiel doppelte Einträge haben solltest und dann, wie von Rolf vorgeschlagen, `filter` auf dem Array `searchKeyValuePair` aufrufen und checken würdest, ob die jeweilige Eigenschaft in dem Objekt `inThisObject` vorhanden ist, würdest du Eigenschaften gegebenenfalls mehrfach zählen, was du vermutlich nicht möchtest.
Für dein konkretes Beispiel würdest du 3 Treffer bekommen, da das Paar (Title, Prometheus) doppelt gezählt wird.
Für diesen Ansatz müsstest du also zunächst sicherstellen, dass die key-value Paare höchstens einmal vorkommen.
Was die effizientest Art ist, Duplikate zu entfernen, kann ich nicht sagen. Eine quick-and-dirty Lösung wäre eventuell, die Objekte in Arrays `['key', 'value']` umzuwandeln (beachte was Rolf dazu geschrieben hat), und dann einen String-Vergleich zu machen:
```js
const queryEntries = new Set(arrSearchKeyValuePairs.map(entry => {
return entry.toString()
}))
const result = Object.entries(inThisObject).filter(entry => {
return queryEntries.has(entry.toString())
})
const count = result.length
```
Da Arrays in JavaScript auch nur Objekte sind, ergibt der Vergleich zwischen zwei verschiedenen Arrays immer `false`, selbst wenn sie den gleichen Inhalt haben. Nimmt man hingegen die String-Representation der Arrays, dann werden beim Einfügen in das `Set` die doppelten Einträge entfernt.
Allerdings gibt es vermutlich bessere Lösungen für das Problem. Im Idealfall solltest du wenn möglich dafür sorgen, dass erst gar keine Duplikate in deiner Datenstruktur auftauchen (beim Einfügen der key-value Paare prüfen, ob das Paar schon vorhanden ist).
Viele Grüße,
Matthias