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
    16
    1
    911

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

  • 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]
    }
    ];
    
    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

                      886

                      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