2017-03-02 18 views
1

いいので、オブジェクトの配列があります。ランダムに生成されたテーブル値で定義されます。私は、オブジェクトの配列を検索し、コードを実行したい場合は、1つのテーブル値例えば。 "table1"は6回以上発生します。ここでJavaScript:特定の値のオブジェクトの配列を検索します。

は、私が持っているオブジェクトの配列です:

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

オブジェクトはすべて実際には同じ値を持っています...あなたに質問がありますか? –

+0

ループを使用して配列を反復することができます。 – brso05

+0

何を試しましたか? –

答えて

1

あなたが条件とカウントするためArray#reduceを使用することができます。

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 
} 

...私はあなたのメソッドを使用している場合どのように私は1値は、テーブルの量まで実行するために、whileループを使用することができます6未満ですか?

whileループを使用して、チェックする値を超えるクロージャを使用できます。

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


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

良い解決策。ありがとう! –

+0

これで、6つ以下の 'table1'値があるまでテーブルの値を変更する必要があります。私はwhileループを持っていますが、テーブルの値をどのように変更すればよいですか? forループでやっているのと似たような方法がありますか? Ex。データ[i]。table = "table2"; – jscoder001

+0

@ jscoder001、コメント内の質問を延長する前に、回答を受け入れてください。私は実際に理由がなく、何を変えるべきか見ています。拡張パラメータを使用すると新しい質問になるかもしれません。 –

2

あなたはこの例を使用することができます。

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

素晴らしい!これでwhileループで同じ条件を使用できますか? – jscoder001

+1

いいえ、結果の配列を生成して後でそれを拒否するため、カウントにフィルタを使用しないでください。間違った方法です。 –

+0

@ NinaScholzああ、私はあなたのメソッドを使用する場合どのようにテーブル1の値の量が6未満になるまで実行するために、whileループを使用できますか? – jscoder001

0

一致する要素が十分見つかった場合は、Array.prototype.someを使用してカウントを停止することもできます。

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

は、代替的に、これは圧縮され、両方のバージョンが目的をカウントするtrue0から1及びfalseをブール値に変換するために、自動型変換を使用

var multiFind = (a, prop, v, n) => a.some(c=> (n-=c[prop] == v)<=0); 

注としてES6構文で書くことができます。関数への呼び出しは、などの条件文で使用できます。

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

さて、私はほとんどそれが働いている。私が "table1"である任意の値を操作するための変数を定義する方法を教えてください。各テーブルには6人の占有者しかいないので、値を別のテーブルに移動する必要があります。 – jscoder001

関連する問題