JavaScript 陣列尋找完美匹配:Every與Some的比較

繼上次提到Some的用法後,這次來講講另一個相近的語法 – Every

用處

透過給定函式、測試陣列中是否所有元素符合條件

回傳值為布林 ( 有的話為true,反之則為false )

語法

基本上與some是一樣的

一樣可寫為 箭頭函式 Arrow function回呼函式 Callback function行內函式 Inline callback function

array.every(function (element, index, array)

參數必要與否說明
element必要要判斷的值
index可選目前元素的索引
array可選呼叫some函式的array

範例

跟some一樣來簡單比較數字是否大過10

僅改變其中一些數字

function isBiggerThan10(element,index,array) {
  console.log('value:'+element+',index:'+index);
  
  return element > 10;
}

[12, 5, 8, 1, 14].every(isBiggerThan10)
[12, 15, 18, 11, 14].every(isBiggerThan10)

結果如下

改為箭頭函式 Arrow function 寫法

[12, 5, 8, 1, 14].every(x => x > 10)
[12, 15, 18, 11, 14].every(x => x > 10)

支援版本

該功能為 ES5 時提出 ( JavaScript2009 ),目前所有的主流瀏覽器都可以支援

不用擔心語法兼容性的問題

Every與Some的差異

SomeEvery
傳入空陣列回傳值falsetrue
終止條件任一元素符合即中斷任一元素不符合即中斷

要注意的是傳入空陣列回傳值的部分,雖然兩個函式概念很像,但結果卻是相反的

這時候我們來看下規格吧

⬆every 的spec

⬆some 的spec

可以看到兩個函式的預設回傳就不一樣了

every 是遇到有不符合的回傳 false,預設回傳 true
some 則是遇到符合的回傳 true,預設回傳 false


結論

與some相同的是,在原生的函式裡面支援了index跟array的參數

故比起單純的for loop,多了一些變化 ( 不用手動紀錄,類似 i++ 那種 )

參考文章 :

🧡如果這篇文章有幫上你的一點點忙,那是我的榮幸

🧡幫我按FB粉絲專頁一個讚,我會很感謝的

✅如有任何疑問,歡迎透過留言或messenger讓我知道 !

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *