NEWS
Vergleich von Objekten in Arrays
-
Hi,
ich möchte die Werte der jeweiligen Keys vergleichen. In dem Fall die Werte von Lights.
Ziel ist, gleiche Werte zu identifizieren.
Ich möchte verhindern, dass z.B. [1] in mehren Keys vorkommt.
Wie ist die beste vorgehensweise?arr = [ { lights: [1,2] }, { lights: [3,4] }, { lights: [1,5] } ]; -
Hi,
ich möchte die Werte der jeweiligen Keys vergleichen. In dem Fall die Werte von Lights.
Ziel ist, gleiche Werte zu identifizieren.
Ich möchte verhindern, dass z.B. [1] in mehren Keys vorkommt.
Wie ist die beste vorgehensweise?arr = [ { lights: [1,2] }, { lights: [3,4] }, { lights: [1,5] } ]; -
Hi,
ich möchte die Werte der jeweiligen Keys vergleichen. In dem Fall die Werte von Lights.
Ziel ist, gleiche Werte zu identifizieren.
Ich möchte verhindern, dass z.B. [1] in mehren Keys vorkommt.
Wie ist die beste vorgehensweise?arr = [ { lights: [1,2] }, { lights: [3,4] }, { lights: [1,5] } ]; -
Hi,
ich möchte die Werte der jeweiligen Keys vergleichen. In dem Fall die Werte von Lights.
Ziel ist, gleiche Werte zu identifizieren.
Ich möchte verhindern, dass z.B. [1] in mehren Keys vorkommt.
Wie ist die beste vorgehensweise?arr = [ { lights: [1,2] }, { lights: [3,4] }, { lights: [1,5] } ];Entscheidend ist die Frage was du tun willst wenn doch eine Zahl an mehreren Stellen vorkommt.
let present = '|'; for (const obj of arr) { for (const id of arr.lights { if (present.indexOf(`|${id}|`) > -1) { //duplikat gefunden } else { present = present.concat(`${id}|`); } } } -
Entscheidend ist die Frage was du tun willst wenn doch eine Zahl an mehreren Stellen vorkommt.
let present = '|'; for (const obj of arr) { for (const id of arr.lights { if (present.indexOf(`|${id}|`) > -1) { //duplikat gefunden } else { present = present.concat(`${id}|`); } } }@asgothian
Ich möchte eine Ausgabe im Log, wenn eine Zahl mehrmals vorkommt.
Werde deinen Code gleich mal testen!Habe zwischenzeitlich dieses aufwändige Teil zusammengebastelt.
function find_duplicate_in_array(arrOne) { //Alle Werte aus allen Lights mappen const arr = arrOne.map(a => a.lights); //Flaches Array erstellen const array = arr.flat() const object = {}; const result = []; array.forEach(item => { if(!object[item]) object[item] = 0; object[item] += 1; }) for (const prop in object) { if(object[prop] >= 2) { result.push(prop); } } return result; } //Funktion ausführen let dups = find_duplicate_in_array(arrOne); //Inhalt zählen let count = dups.length; if (count > 0) { if (count > 1) { dups = dups.join(' und '); console.warn(`Lampen ${dups} kommen mehrmals vor!`); } else { console.warn(`Lampe ${dups} kommt mehrmals vor!`); } } else { console.log(`Keine Lampen kommen mehrmals vor. Gut!`); } -
Hi,
ich möchte die Werte der jeweiligen Keys vergleichen. In dem Fall die Werte von Lights.
Ziel ist, gleiche Werte zu identifizieren.
Ich möchte verhindern, dass z.B. [1] in mehren Keys vorkommt.
Wie ist die beste vorgehensweise?arr = [ { lights: [1,2] }, { lights: [3,4] }, { lights: [1,5] } ];@schmakus sagte in Vergleich von Objekten in Arrays:
arr = [ { lights: [1,2] }, { lights: [3,4] }, { lights: [1,5] } ];
Die beste Vorgehensweise ist, bereits vor dem hinzufügen zu prüfen, ob der wert (nicht key) bereits vorhanden ist.
arr.reduce((acc,el)=>el.lights.includes(1)) // ergibt true arr.reduce((acc,el)=>el.lights.includes(6)) // ergibt false -
@schmakus da kommst du um eine schleife nicht drum herum..
bzw was willst du dann machen ?? ewtl wandel das array nach string und mit replace den wert löschen
-
@schmakus sagte in Vergleich von Objekten in Arrays:
arr = [ { lights: [1,2] }, { lights: [3,4] }, { lights: [1,5] } ];
Die beste Vorgehensweise ist, bereits vor dem hinzufügen zu prüfen, ob der wert (nicht key) bereits vorhanden ist.
arr.reduce((acc,el)=>el.lights.includes(1)) // ergibt true arr.reduce((acc,el)=>el.lights.includes(6)) // ergibt false -
@oliverio Die Werte werden aktuell noch manuell eingetragen, bzw. die Objekte manuell erstellt. Deshalb die Abfrage beim Starten eines Scripts.
@schmakus sagte in Vergleich von Objekten in Arrays:
@oliverio Die Werte werden aktuell noch manuell eingetragen, bzw. die Objekte manuell erstellt. Deshalb die Abfrage beim Starten eines Scripts.
ok, falls schon duplikate drin sind dann so
var data=[];arr.map(i1=>i1.lights.map(i2=>isNaN(data[i2])?data[i2]=1:data[i2]++))data enthält dann eine Auflistung, welcher wert wie oft enthalten ist.
"[null,2,1,1,1,1]"
das bedeutet:
key 0 exisitiert gar nicht, daher null
key 1 exisitiert 2 mal
key 2 exisitiert 1 mal
key 3 exisitiert 1 mal
key 4 exisitiert 1 mal
key 5 exisitiert 1 mal
key 6 exisitiert 1 mal -
@arteck Ein Replace nicht. Ich möchte nur verhindern, bzw. eine Ausgabe loggen, wenn eine Lampe in mehreren Gruppen zugeordnet wurde.
@schmakus sagte in Vergleich von Objekten in Arrays:
Ausgabe loggen, wenn eine Lampe in mehreren Gruppen zugeordnet wurde.
Vorschlag:
function findDuplicate(arr) { let found = []; for(let i = 0; i < arr.length; i++) { let lights = arr[i].lights; for(let j = 0; j < lights.length; j++) { if(found.includes(lights[j])) log('Lampe ' + lights[j] + ' kommt mehrmals vor!', 'warn'); else found.push(lights[j]); } } } -
@paul53 sagte in Vergleich von Objekten in Arrays:
@schmakus sagte in Vergleich von Objekten in Arrays:
Ausgabe loggen, wenn eine Lampe in mehreren Gruppen zugeordnet wurde.
Vorschlag:
function findDuplicate(arr) { let found = []; for(let i = 0; i < arr.length; i++) { let lights = arr[i].lights; for(let j = 0; j < lights.length; j++) { if(found.includes(lights[j])) log('Lampe ' + lights[j] + ' kommt mehrmals vor!', 'warn'); else found.push(lights[j]); } } }das folgende meldet, sobald eine lampe das 2. mal oder noch öfters vorkommt, jedes mit einer einzelnen meldung
var data=[];arr.map(i1=>i1.lights.map(i2=>{isNaN(data[i2])?data[i2]=1:data[i2]++;data[i2]>1?console.log("found duplicate "+i2):""}))das hier gibt Meldungen aus, wenn alles eingesammelt wurde
var data=[]; arr.map(i1=>i1.lights.map(i2=>{isNaN(data[i2])?data[i2]=1:data[i2]++})); data.map((el,i)=>el>1?console.log("Lampe "+i+" kommt "+el+" vor"):"") -
@paul53 sagte in Vergleich von Objekten in Arrays:
@schmakus sagte in Vergleich von Objekten in Arrays:
Ausgabe loggen, wenn eine Lampe in mehreren Gruppen zugeordnet wurde.
Vorschlag:
function findDuplicate(arr) { let found = []; for(let i = 0; i < arr.length; i++) { let lights = arr[i].lights; for(let j = 0; j < lights.length; j++) { if(found.includes(lights[j])) log('Lampe ' + lights[j] + ' kommt mehrmals vor!', 'warn'); else found.push(lights[j]); } } }das folgende meldet, sobald eine lampe das 2. mal oder noch öfters vorkommt, jedes mit einer einzelnen meldung
var data=[];arr.map(i1=>i1.lights.map(i2=>{isNaN(data[i2])?data[i2]=1:data[i2]++;data[i2]>1?console.log("found duplicate "+i2):""}))das hier gibt Meldungen aus, wenn alles eingesammelt wurde
var data=[]; arr.map(i1=>i1.lights.map(i2=>{isNaN(data[i2])?data[i2]=1:data[i2]++})); data.map((el,i)=>el>1?console.log("Lampe "+i+" kommt "+el+" vor"):"")
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden