2017-01-20 8 views
1

findをJavascriptで使用すると、配列から1018の2つのアイテムを見つけるにはどうすればよいですか?Javascript - 配列内の2つの項目を検索しますか?

var ages = [3, 10, 18, 20]; 
ages.find(age => age === 10); // works on one item, returns 10 
ages.find(age => age === (10 || 18)); // does not return 10 and 18 
+1

'年齢=== 10 ||年齢=== 18' –

+0

または結果に両方の項目を含めることを意味しましたか?私はあなたが二人のどちらかを意味すると思った。 –

+0

うん、両方の項目。私はそれが複数のためのフィルタだと思う:) – Wonka

答えて

4

私はあなたが探している可能年齢を保持している別の配列を作成します。これは、orステートメントよりも読みやすく、管理しやすくなります。

var ages = [3, 10, 18, 20]; 
 
var criteria = [10, 18]; 
 

 
let found = ages.filter(age => criteria.includes(age)); 
 
console.log(found);


@Flavioオチョアで指摘したように、Array.includesは、従来のブラウザでサポートされない場合があります。あなたがサポート心配している、またはArray.includes用ポリフィルを使用していない場合は、あなただけの代わりにArray.indexOfを使用することができます。

ages.filter(age => criteria.indexOf(age) > -1); 
+0

私は同意します、これは 'または'ステートメントなしで最もクリーンなアプローチです:) – Wonka

+0

[MDN](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/includes)から実験技術であり、ECMAScript 2016(ES7)提案の一部です。 このテクノロジの仕様が安定していないため、互換性表でさまざまなブラウザの使用状況を確認してください。また、実験的な技術の構文と動作は、仕様の変更に伴い、将来のバージョンのブラウザで変更される可能性があることに注意してください。 ' –

+0

@FlavioOchoa、それを注目してくれてありがとうございます。将来の読者にとって重要なので、私は先に進み、あなたの意見を参照しました。 – KevBot

1

できません。少なくとも1回の呼び出しではありません。

(強調鉱山)

find()メソッドは、与えられたテスト関数を満たす配列で最初要素の値を返します。それ以外の場合、undefinedが返されます。これを近づいての

Source

良い方法はfilterを使用することです。

var ages = [3, 10, 18, 20]; 
 
console.log(ages.filter(age => age === 10 || age === 18));

5

あなたはpredicate.The filter()方法が提供される関数によって実装テストに合格するすべての要素を使用して新しい配列を作成一致する要素を返すfilter方法を利用することができます。

findメソッドは、条件を満たす配列の最初の要素を返します。したがって、findを使用すると、2つ以上の要素を返すことはできません。

また、比較は、
代わりのage === (10 || 18)
使用age === 10 || age === 18)

var ages = [3, 10, 18, 20]; 
 
var result = ages.filter(age => age === 10 || age === 18); 
 
console.log(result);

2

まず、

あなたのコードで間違っています

は、あなたが結果の配列を取得するには、二次利用Array#filterをチェックするための

age === 10 || age === 18 

必要があります(それが唯一のage === 10チェックする)間違っています。

var ages = [3, 10, 18, 20]; 
 
console.log(ages.filter(age => age === 10 || age === 18));

関連する問題