• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] (Advanced) Filter Array mit Objekten

Kerockx

New member
Hallo zusammen,

zunächst erst einmal vielen Dank für dieses tolle Forum!

Ich möchte zwei Arrays mit Objekten miteinander vergleichen und nur diejenigen Objekte zurückgeben, die in einem Value (ebenfalls ein Array) mind. alle Werte aus den Objekten des anderen Arrays haben.

Hier ein Beispiel zur Veranschaulichung:

Code:
const arr1 = [
    { id: 1, values: [1]},
    { id: 2, values: [2]},
    { id: 3, values: [1,2]},
    { id: 4, values: [1,2,3]},
  ];
  
  const arr2 = [
    { id: 1, values: [1]},
    { id: 2, values: [2]}
  ];

//gewünschter Output => [{ id: 3, values: [1,2]}, { id: 4, values: [1,2,3]}]

Bei der Lösung spielt die Performance eine wesentliche Rolle, da in dem ersten Array mehrere 100 Objekte sein können.

Mit der .filter Methode habe ich bereits gearbeitet. In diesem speziellen Fall, komme ich damit aber nicht weiter.

Ich hoffe ihr könnt mir dabei helfen.

Ich sitze an einem React Native Projekt. Vielleicht kennt ihr auch eine Libary, die dies für mich erledigen kann.

Vielen Dank
Kerockx
 
Zuletzt bearbeitet von einem Moderator:
Vorschlag: das zweite Array in ein temporäres Hash of Arrays (ich meine damit ein JS "Object") kopieren mit den values als keys und den id's als values in Array Format. Dann durch array 1 iterieren und einfach auf defined im Hash abfragen.
 
Hallo mikdoe,

vielen Dank für deine Antwort!

Ich konnte das Problem mit Hilfe deiner Antwort lösen:

Code:
const arr1 = [
    { id: 1, values: [1]},
    { id: 2, values: [2]},
    { id: 3, values: [1,2]},
    { id: 4, values: [1,2,3]},
  ];
  
  const arr2 = [
    { id: 1, values: [1]},
    { id: 2, values: [2]}
  ];

  const tmpArray = []
  
  arr2.map((item) => {
    tmpArray.push(...item.values)
  });

  const result = [];

  arr1.map((item) => {
    if(tmpArray.every(element => item.values.includes(element))){
      result.push(item)
    }
  });

  console.log(result) 
  // => [{ id: 3, values: [1,2]}, { id: 4, values: [1,2,3]}]

Allerdings erscheint mir dein Text eleganter als mein Code.
Magst du den Code vielleicht deinem Vorschlag entsprechend anpassen?

Vielen Dank
Kerockx
 
Zurück
Oben