2017-02-06 8 views
1

array.some関数を使用してデータを繰り返し処理しようとしていますが、if文が成功するとfieldが返されます。booleanの代わりに `array.some()`を使用して要素を返します

代わりに、実際の変数(要素の詳細が含まれています)ではなく、trueのように論理値が返されています。

for (var index in allFields) { 
     const invalidField = allFields[index].some(function (field){ 
     if (!validation.getIn([index,field.dataset.fieldKey,'isValid'])) { 
      return field; 
     } 
     }); 
     if (invalidField) { 
     return invalidField; 
     } 
    } 

コードはallFieldsを循環し、インデックスの下にあるフィールドのリストを含んでいます。次に、とvalidationという別のデータセットを比較します。

fieldには要素が含まれています。私はfieldを戻したいが、私はinvalidFieldをチェックする代わりに、とき、私はあなたがArray.prototype.filter代わりのArray.prototype.someを探している要素

+1

'some'はブール値を返し、' true'は繰り返しを終了します。 –

+2

'array.some'は設計どおりに動作しています。 [docs](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some) 'array.find()' [docs](https://developer.mozilla.org)/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find)あなたが望むものより多くなるかもしれない – ste2425

+0

あなたのコールバックから望む要素である 'field'を返すことがあなたの混乱であるかもしれませんが、 'some'が返します。戻り値の場合は[msn](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some): 'コールバック関数が配列要素の真理値を返す場合はtrue ; '' field'は "truthy"なので '' some''が 'true'を返します –

答えて

5

Array.prototype.some()を使用することができますarray.filter()

for (var index in allFields) { 
    const invalidField = allFields[index].filter(function (field){ 
    if (!validation.getIn([index,field.dataset.fieldKey,'isValid'])) { 
     return field; 
    } 
    }); 
    if (invalidField.length > 0) { //check if returned anything 
    return invalidField[0]; 
    } 
} 

を使用する必要があります配列はコールバック関数で定義されたテストに合格します。配列findを使用して、最初の要素パッシブテストを返すメソッド

+0

' find'は、一致した場合に配列から項目を返します。それ以外の場合は 'undefined'です。したがって、その戻り値を使用する前に' undefined'を返したかどうかを確認する方が良いでしょう。 –

1

の代わりにtrueを取得します。

フィルタは現在、some()に何をする予定ですか。 some()は、条件を満たす要素が1つ以上ある場合はブール値を返し、filter()は条件を満たす要素の新しい配列を作成します。

関連する問題