2017-03-02 6 views
1

Ok, also habe ich eine Reihe von Objekten. Welche werden mit einem zufällig generierten Tabellenwert definiert. Ich möchte das Array von Objekten durchsuchen und Code ausführen, wenn ein Tabellenwert z. "table1" tritt mehr als 6 Mal auf. HierJavaScript: Suche Array von Objekten für einen bestimmten Wert

ist das Array von Objekten, die ich habe:

var data = [{ 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
       { 
        name: "", 
        pref: "", 
        table: "" 
       }, 
      ]; 
+3

die Objekte haben alle den gleichen Wert, eigentlich ... haben Sie eine Frage? –

+0

Sie können eine Schleife verwenden, um Ihr Array zu iterieren. – brso05

+0

was hast du probiert? –

Antwort

1

Sie könnten Array#reduce verwenden für mit Bedingung zu zählen.

ES6

if (data.reduce((sum, item) => sum + (item.table === "1"), 0) > 6) { 
    // do something 
} 

ES5

if (data.reduce(function (sum, item) { return sum + (item.table === "1"); }, 0) > 6) { 
    // do something 
} 

... wenn ich Ihre Methode verwenden, wie kann ich eine while-Schleife verwenden, bis die Menge der Tabelle 1 Werte auszuführen sind weniger als 6?

Sie könnten eine while Schleife mit einem Verschluss über den Wert verwenden, um zu überprüfen.

function countTable(value) { 
    return function (sum, item) { 
     return sum + (item.table === value); 
    }; 
} 


while (data.reduce(countTable('table1'), 0) >= 6) { 
    // do something 
} 
+0

Schöne Lösung. Vielen Dank! –

+0

Ok, also muss ich den Tabellenwert ändern, bis 6 oder weniger 'table1' Werte vorliegen. Ich habe jetzt die While-Schleife, wie ändere ich den Tabellenwert? Gibt es eine Möglichkeit, es ähnlich wie in einer For-Schleife zu machen? Ex. Daten [i].Tabelle = "Tabelle2"; – jscoder001

+0

@ jscoder001, bitte akzeptieren Sie eine Antwort, bevor Sie die Frage in den Kommentaren erweitern. Ich sehe eigentlich keinen Grund warum und welche Eigenschaft zu ändern. Sie könnten als eine neue Frage mit erweiterten Parametern. –

2

Sie dieses Beispiel verwenden können:

if (data.filter((item)=>{return item.table === "1"}).length >= 6) 
+0

Großartig! Kann ich jetzt dieselbe Bedingung in einer While-Schleife verwenden? – jscoder001

+1

Nein, Sie sollten keinen Filter zum Zählen verwenden, es ist die falsche Methode, weil Sie ein Ergebnis-Array generieren und es später ablehnen. –

+0

@NinaScholz Oh, also, wenn ich Ihre Methode verwende, wie kann ich eine While-Schleife verwenden, bis die Anzahl der Tabelle 1 Werte kleiner als 6 sind? – jscoder001

0

Sie können auch Array.prototype.some Zählen zu stoppen verwenden, wenn eine ausreichende Anpassungselemente gefunden wurden.

function multiFind(array, property, value , count) { 
    return array.some(function(c) { 
     count -= c[property] == value; 
     return count<=0; 
    }); 
} 

Alternativ könnte dies als

in ES6 Syntax komprimiert und geschrieben wird
var multiFind = (a, prop, v, n) => a.some(c=> (n-=c[prop] == v)<=0); 

Hinweis beiden Versionen verwenden automatische Typ-Konvertierung boolean zu konvertieren true zu 1 und false-0 für Zwecke zu zählen. Ein Aufruf der Funktion kann dann in einer bedingten Anweisung wie z.

while(multiFind(data, "table", "table1", 6)) { 
    // do stuff while there are more than 5 "table1" table properties in data array 
} 
+0

Ok, ich habe es fast funktioniert. Könntest du mir sagen, wie ich eine Variable definieren könnte, mit der ich jeden Wert von "table1" manipulieren könnte? Ich muss den Wert in eine andere Tabelle verschieben, da jede Tabelle nur 6 Personen haben darf. – jscoder001

Verwandte Themen