Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Vergleich von Objekten in Arrays

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    900

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    685

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Vergleich von Objekten in Arrays

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 5 Kommentatoren 718 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • SchmakusS Schmakus

    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]
    }
    ];
    
    arteckA Offline
    arteckA Offline
    arteck
    Developer Most Active
    schrieb am zuletzt editiert von arteck
    #2

    @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

    zigbee hab ich, zwave auch, nuc's genauso und HA auch

    SchmakusS 1 Antwort Letzte Antwort
    0
    • SchmakusS Schmakus

      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]
      }
      ];
      
      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #3

      @schmakus
      Wo ist in diesem Array oder den Objekten dein eindeutiger Schlüssel?

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      1 Antwort Letzte Antwort
      0
      • SchmakusS Schmakus

        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]
        }
        ];
        
        AsgothianA Offline
        AsgothianA Offline
        Asgothian
        Developer
        schrieb am zuletzt editiert von
        #4

        @schmakus

        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}|`);
            }
          }
        }
        

        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

        SchmakusS 1 Antwort Letzte Antwort
        0
        • AsgothianA Asgothian

          @schmakus

          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}|`);
              }
            }
          }
          
          SchmakusS Offline
          SchmakusS Offline
          Schmakus
          Developer
          schrieb am zuletzt editiert von
          #5

          @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!`);
          }
          

          Dev of LightControl Adapter, Contributor of HUE and DoorBird Adapter

          1 Antwort Letzte Antwort
          0
          • SchmakusS Schmakus

            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]
            }
            ];
            
            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von
            #6

            @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
            

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            SchmakusS 1 Antwort Letzte Antwort
            0
            • arteckA arteck

              @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

              SchmakusS Offline
              SchmakusS Offline
              Schmakus
              Developer
              schrieb am zuletzt editiert von
              #7

              @arteck Ein Replace nicht. Ich möchte nur verhindern, bzw. eine Ausgabe loggen, wenn eine Lampe in mehreren Gruppen zugeordnet wurde.

              Dev of LightControl Adapter, Contributor of HUE and DoorBird Adapter

              paul53P 1 Antwort Letzte Antwort
              0
              • OliverIOO OliverIO

                @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
                
                SchmakusS Offline
                SchmakusS Offline
                Schmakus
                Developer
                schrieb am zuletzt editiert von
                #8

                @oliverio Die Werte werden aktuell noch manuell eingetragen, bzw. die Objekte manuell erstellt. Deshalb die Abfrage beim Starten eines Scripts.

                Dev of LightControl Adapter, Contributor of HUE and DoorBird Adapter

                OliverIOO 1 Antwort Letzte Antwort
                0
                • SchmakusS Schmakus

                  @oliverio Die Werte werden aktuell noch manuell eingetragen, bzw. die Objekte manuell erstellt. Deshalb die Abfrage beim Starten eines Scripts.

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von
                  #9

                  @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

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  1 Antwort Letzte Antwort
                  0
                  • SchmakusS Schmakus

                    @arteck Ein Replace nicht. Ich möchte nur verhindern, bzw. eine Ausgabe loggen, wenn eine Lampe in mehreren Gruppen zugeordnet wurde.

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #10

                    @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]);
                            }
                        }
                    }
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      schrieb am zuletzt editiert von OliverIO
                      #11

                      @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"):"")
                      

                      Meine Adapter und Widgets
                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                      Links im Profil

                      SchmakusS 1 Antwort Letzte Antwort
                      0
                      • OliverIOO OliverIO

                        @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"):"")
                        
                        SchmakusS Offline
                        SchmakusS Offline
                        Schmakus
                        Developer
                        schrieb am zuletzt editiert von
                        #12

                        Vielen Dank euch allen! Viele Wege führen nach Rom.
                        Aber das von @OliverIO gefällt mir sehr gut. Schön kompaktes Coding.

                        @paul53, deine Schleifen sind gut lesbar. Danke.

                        Dev of LightControl Adapter, Contributor of HUE and DoorBird Adapter

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        398

                        Online

                        32.6k

                        Benutzer

                        82.0k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe