someとeveryの罠

someとeveryの罠:


はじめに

JavaScriptには配列に対して使える便利なメソッドがいくつかある(mapfilterなど)。

今回はその内の一種であるsomeeveryの話。


some

配列に対して条件式が一つでもtrueの場合にtrueを返す

some.js
const array = [1, 2, 3] 
 
// true 
array.some(item => item === 1) 
 
// false 
array.some(item => item === 4) 


every

配列に対して条件式が全てtrueの場合にtrueを返す

(※ 一つでもfalseの場合はfalse

every.js
const array = [1, 2, 3] 
 
// true 
array.every(item => typeof item === 'number') 
 
// false 
array.some(item => typeof item === 'string') 


違い

空配列([])に対する結果が異なる

  • some: false
  • every: true
difference.js
// false 
[].some(item => item === 1) 
 
// true 
[].every(item => item === 1) 


説明

everyは数学における「∀ (すべての / for all)」記号と同様のふるまいをし、空集合のすべての要素が与えられた任意の条件を満たすことは空虚に真 (vacuously true)なのでtrueとなるそうです。

参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/every


終わりに

感覚的にはむしろ、全てtrueでないとtrueにならないeveryの方が空集合でfalseになると思っていたのでまんまとハマりました。

"空集合"とか"∀"とか高校数学ぶりだわ!懐かしい!笑

コメント

このブログの人気の投稿

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-04-30 23:37:32 RSSフィード2021-04-30 23:00 分まとめ(42件)

投稿時間:2023-02-05 02:09:04 RSSフィード2023-02-05 02:00 分まとめ(9件)