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
    469

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

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

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

    Dev of LightControl Adapter, Contributor of HUE and DoorBird Adapter

    arteckA OliverIOO AsgothianA 4 Antworten 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]
      }
      ];
      
      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

                          925

                          Online

                          32.6k

                          Benutzer

                          81.9k

                          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