iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
自我挑戰組

這些日子我學到的JavaScript 系列 第 16

這些日子我學到的JavaScript:Day15- take a "break"

  • 分享至 

  • xImage
  •  

break 應該寫在哪裡?
以下兩個範例程式碼,都是 if 跟 for 迴圈一起使用,差別在於 break 放置位置的不同。

break 在 if 裡:
for (var i=0; i<farm.length; i++) {
if (farm[i].chick>50) {
console.log(farm[i].farmer + '的小雞有超過50個')
break;
}
console.log('小雞不夠多'); // 因為在 break 後面故不執行
}
break 放在 if 裡的意思是,當條件滿足 chick > 50 時整個迴圈就會終止,此時 break 後方的程式碼都不會執行。

break 在 if 的外面、for 的裡面:
for (var i=0; i<farm.length; i++) {
if (farm[i].chick>50) {
console.log(farm[i].farmer + '的小雞有超過50個')
}
break;
}
break 放在 if 外面 for 迴圈裡面,是指不管條件是否成立 for 迴圈都只執行一次。它讓迴圈在 if 撈出符合條件的第一筆資料後就會停止,甚至 if 條件沒成立時,也會執行一次,只不過輸出的結果是 undefined。

撈資料的各種情境
那麼,當我們需要用 break 讓迴圈只執行一次時,為何不單用 if 去撈出資料就好呢?
「單用 if」 及 「使用迴圈搭配 if」兩者的意義跟效果又有什麼不同?

其實 break 和 if 以及 for 迴圈的搭配方式,要看使用狀況而定,在此用一些範例來輔助說明。
先看陣列資料:

var farms = [
{
dog: "casper",
vegetable: ["青椒", "花椰菜"],
farmer: "卡斯柏",
chick:120,
},
{
dog: "casper",
vegetable: ["青椒", "花椰菜"],
farmer: "由先生",
chick:50,
},
{
dog: "雷達",
vegetable: ["青椒", "花椰菜"],
farmer: "老樹會",
chick:200,
}
]
單用 if:
if(farms.length) {
console.log('有'+farms.length+'間農場');
}
// "有3間農場"
如果單使用 if,在此範例只能判斷是否有撈到陣列資料,會使用迴圈是因為要從陣列去撈資料出來顯示。

for 迴圈 + break:
var str='';
for(var i=0; i<farms.length; i++){
str += '農夫:'+farms[i].farmer+'有'+farms[i].chick+'隻小雞';
break;
}
console.log(str);
// "農夫:卡斯柏有120隻小雞"
如果只是想撈一筆農夫資料,就在迴圈中直接加上 break,讓程式只跑一次迴圈。

for 迴圈 + if:
var str2='';
for(var i=0; i<farms.length; i++){
if(farms[i].chick > 100) {
str2 += '農夫:'+farms[i].farmer+'有'+farms[i].chick+'隻小雞';
}
}
console.log(str2);
// "農夫:卡斯柏有120隻小雞 農夫:老樹會有200隻小雞"
想知道哪些農場的小雞有 100 隻以上,就在迴圈中加入 if 判斷,就能跑出相應的資料。

for 迴圈 + if + break:
var str3='';
for(var i=0; i<farms.length; i++){
if(farms[i].chick > 100) {
str3 += '農夫:'+farms[i].farmer+'有'+farms[i].chick+'隻小雞';
}
break;
}
console.log(str3);
// "農夫:卡斯柏有120隻小雞"
只列出 1 筆有符合有養 100 隻小雞以上的農場。


上一篇
這些日子我學到的JavaScript:Day14-迴圈加總
下一篇
這些日子我學到的JavaScript:Day16-JSON
系列文
這些日子我學到的JavaScript 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言