使用其他語法來替代中止 forEach
以達成目的
前篇談到如何中止 forEach
迴圈,這篇將會演示如何使用其他語法達到類似結果的做法。而其他語法則是在上篇中記錄基本用法,這篇將不再贅述。
從陣列中檢查是否有符合條件的元素,我們可以使用 some
方法來取得檢查結果
const arr = [1, 2, 3]
const res = arr.some(val => val === 2)
console.log(res)
// output
// true
const res = arr.some(val => val === 5)
console.log(res)
// output
// false
或者使用 every
檢查陣列中是否有元素不符合條件
const arr = [18, 20, 26]
const res = arr.every(val => val < 30)
console.log(res)
// output
// true
const res = arr.every(val => val > 20)
console.log(res)
// output
// false
如果原本就了解 some
和 every
方法,上述兩種執行對你來說是小菜一碟
So, What about nested ? 如何檢查雙陣列是否符合指定條件?
第一,假設要從兩個陣列中,檢查是否具有任一的相同元素,並且返回布林值。透過 some
方法來迭代兩個陣列,每次完成內層迭代時必須返回結果給外層,外層接收值之後會決定是否中斷迭代返回結果,假設內層從不返回任何值給外層 callback
函數,那麼外層永遠只會返回 false。
const arr1 = [1, 2, 3]
const arr2 = [2, 3, 4]
const res1 = arr1.some(v1 => {
const res2 = arr2.some(v2 => {
return v1 === v2
})
return res2 // 必須返回結果給上層
})
倘若檢查條件沒有太複雜,可將程式碼簡化如下
const res = arr1.some(v1 =>
arr2.some(v2 =>
v1 === v2
)
)
第二,從兩個未排序的陣列中,檢查兩陣列是否為相同元素的陣列,所有元素皆相同但位置可以不同,例如 1,2,3
和 2,1,3
符合條件,兩陣列內都有 1, 2, 3 三個元素,雖然位置擺放不同卻不影響結果。
const arr1 = [1, 2, 3, 4, 5]
const arr2 = [3, 5, 1, 4, 2]
const res1 = arr1.every(v1 => {
const res2 = arr2.some(v2 => {
return v1 === v2
})
return res2
})
利用 every
的特性以及搭配 some
方法,當內層有任一元素與外層元素相同時,內層會返回 true 給外層,外層接收到結果後會繼續下一次迭代;若內層迭代在某次返回 false,外層接收到此結果後,every 會直接返回 false 結果並中止所有迭代。
經過以上的範例後,我們應根據不同的情況去選擇適當的語法使用,以有效地處理商業邏輯。現在,有沒有覺得在 forEach
中使用 try catch
有點殺雞焉用牛刀?
Thanks for reading the article 🌷 🌻 🌼
If you like it, please don't hesitate to click heart button ❤️
or follow my GitHub ⭐ I'd appreciate it.
Top comments (0)