2016-07-01 3 views
-1

を更新するための最良の方法です私はJavascript /活字体でどのコレクション内の項目の最初のオカレンスを見つけ、それに

[ 
    {"order":1,"step":"abc:","status":true}, 
{"order":2,"step":"xyz","status":true}, 
{"order":3,"step":"dec","status":false}, 
{"order":4,"step":"pqr","status":false}, 
{"order":5,"step":"tuv","status":false} 
.... 
]; 

をコレクションを持っていることは、私はそれを識別するたびに、そのと呼ばれる関数を記述する必要があります最初のfalseの出現(上記の例ではOrder:3)をtrueに更新します。上記のメソッドが再び呼び出されると、次の要素(順序:4)が更新されます。偽のステップは、常に完了したステップの真下になります。

この機能を作成するには、どのような方法が最も簡単です(コードは少なくてエレガントですか)。コレクション内のアイテムごとに手作業でループして、最初に見つかったfalseを確認してから更新します。

+0

'ため、loop' ..'条件は 'true'を... – Rayon

+0

'(注文として評価されている場合condition' .. 'それをbreak'場合.filter(o =>!o.status)[0] || {})。status = true; ' – nnnnnn

答えて

5

ES6では、この使用することができます:

yourArray.find((element) => !element.status).status = true; 

find()とを参照してください。その互換性テーブル

status: falseというエントリがない場合、これは失敗します。迅速で汚れた修正は、たとえば以下のように見えます。しかし、それは完全にあなたのユースケースに依存します。

+0

element.statusを使用しないために+1を取得しました== false – GMaiolo

2

あなたが必要とする出現を探すときは、検索を停止するために 'break'ステートメントを挿入します。

例:

for(var i=0; i<recs.length; i++) { 
     if (recs[i]['status'] == false) { 
      recs[i]['status'] = true; 
      break; 
     } 
    } 
+0

Arrayマップなどを使用してES6のバージョンが短くなっていますか?ありがとう!! – user6123723

+0

これを実行しているプラ​​ットフォームまたは環境を指定していません。上記を使用すると、すべてのブラウザで確実に動作します。 – SPlatten

3

ほとんどあなたが説明したものを、あなたがそれを行うだろうかです:

for (let order of orders) { 
    if (!order.status) { 
     order.status = true; 
     break; 
    } 
} 
+0

書面ありがとうございます。アレイマップを使用しているES6バージョンが短くなっていますか?ありがとう!! – user6123723

+1

これは 'for..of'のようないくつかのES6コンポーネントを使用しています。それに、私はそれのために可能な最短畳み込み方法を書くことに同意しない。 – Marty

1

Lodash findメソッドを使用すると、誤ったステータスの最初の発生を見つけることができます。

サンプルコード

_.find(users, function(object) { return object.status === false }); 

lodash find documentation link

関連する問題