2017-12-28 6 views
3

であれば、私はこのような配列を持って確認してください。 例:Array.everyは()の値がfalse

myArray.every(x => x==false) 
    //do something 

これは正しい方法ですか?または関数を渡す必要がありますか?

+0

あなたは関数を渡していますが、あなたは '==='を使うことができます。 – elclanrs

+5

あなたの配列は実際には 'Array'ではなく' Object'です。オブジェクトに '.every()'を使うことはできません。 –

答えて

3

です。 の配列ではなく、のオブジェクトです。

すべての値がfalseであるかどうかを確認する場合は、Object#keysでキーを取得してから、そのアレイでArray#everyを使用します。

const obj = {firstValue: false, secondValue: false, thirdValue: true, forthValue: false}; 
 

 
const allFalse = Object.keys(obj).every(key => obj[key] === false); 
 

 
console.log(allFalse);

あなたがES8を使用している場合、あなたはまた、あなたは、配列を持っていないObject#values

const obj = {firstValue: false, secondValue: false, thirdValue: true, forthValue: false}; 
 

 
const allFalse = Object.values(obj).every(value => value === false); 
 

 
console.log(allFalse);

+1

'Object.values'を使うほうがいいですか? – Andy

+0

私はあなたが「すべての**値**が「偽」であるならば」と思っています。 – Barmar

+0

@Andyはその変種も追加します –

2

で作業することができ、あなたがオブジェクトを持っている

Object.values(myArray).every(x => x===false) 

レガシーブラウザで

+0

ああ、ありがとうございます! –

0

を使用している場合は注意が、私はどうなるポリフィルが必要になります反復する値の配列を作成するために、Object.valuesを()を使用することができます:

!Object.values(myArray /*?*/).reduce((a,b) => a || b); 
+0

残念ながら、 '.every'や' .some'で見られる短絡効果を失います。 –

+0

@rock star [よく、それはまだまだ速い]](http://jsben.ch/Nz2X7) –

+0

うーん...私は懐疑的だ。私がFirefoxでテストを再実行すると、結果は前後に反転します。論理的には、短絡バージョンは速くなければならないが、それは決して保証ではない。とにかく、短いセットでは、それは確かに顕著な違いを作りません。一度大規模に、私は間違いなく早期に停止したいと思います。 –

0

横をArray#everyを使用する場合は、Array#someを使用し、Booleanをコールバックとして使用してlogical NOT !という値を使用できます。

if (!Object.values(myObject).some(Boolean)) { 
    //... 
} 
+0

'.some(b => b)'はより短く、同じ結果を持っているので、組み込みの 'ブール'を使うことは矢関数よりもあまり魅力的にはなりませんでしたが、これは良い方法です。 –

関連する問題