[英]If / Else statement with curly braces
我試圖用兩個參數創建一個函數,一個用於數組(ary),第二個用於在數組內搜索名稱。
但是,我不明白為什么第一個代碼不起作用而第二個代碼卻不起作用。
有人可以解釋一下嗎?
// wrong code
var fruit = ['banana', 'apple', 'cherry', 'watermelon'];
var food = ['pizza', 'rice', 'cheese', 'potato'];
var search = function(ary, name) {
for (var i = 0; i < ary.length; i++) {
if (name == ary[i]) {
return name + " was found!";
} else {
return name + " was not found";
}
}
};
search(food, 'potato');
//"potato was not found"
// right code
var fruit = ['banana', 'apple', 'cherry', 'watermelon'];
var food = ['pizza', 'rice', 'cheese', 'potato'];
var search = function(ary, name) {
for (var i = 0; i < ary.length; i++)
if (name == ary[i])
return name + " was found!";
return name + " was not found";
};
search(food, 'potato');
//"potato was found!"
謝謝!
在第一個示例中,您將在第一個匹配失敗時返回,因此在無法匹配數組的第一項后,它將從函數中返回。
因此,else塊中的零件應移到循環之外。
因為在第一個函數中,uou在一次迭代后立即返回; 您不必等待整個數組循環通過; 我敢打賭,數組的第一個元素是“找到”的。
因此,對於您的第一個功能,將找到以下這些:
search(fruit, 'banana');
search(food, 'pizza');
但沒有其他人。
在第二個例子中,只有在整個數組都循環遍歷而沒有找到匹配項時(即退出for循環時),才返回“未找到”。
我看到了問題。
在第一個代碼段中,您在else語句中返回false。 這意味着第一次通過循環,您將返回true或false。 它僅檢查第一項。
在您的第一個版本中, else
在for
循環內,因此該函數在其第一次迭代中將始終返回“已找到”或“未找到”。 該循環將永遠不會達到其第二次迭代。
在您的第二個版本中, else
不屬於for
循環主體,因此它僅在循環完成(運行其所有迭代)之后運行,而沒有找到匹配項。
for (var i = 0; i < ary.length; i++)
if (name == ary[i])
return name + " was found!";
return name + " was not found";
是相同的:
for (var i = 0; i < ary.length; i++) {
if (name == ary[i]) {
return name + " was found!";
}
}
return name + " was not found";
遍歷數組中的所有項目后,它返回false
。 在您提供的錯誤代碼中,它僅檢查第一項是否等於name
因為在循環中,無論是否找到它,您都將返回(因此,如果第一項等於name
則它將返回true
,否則將返回true
。將返回false
),因此將不會檢查索引1
的項目,因為該函數已經返回。
注意:您可以在JS: indexOf
使用默認的搜索功能,如下所示:
var search = function(ary, name) {
if(ary.indexOf(name) != -1) // index is -1 (not valid) then it's not found
return name + " was found";
else
return name + " was not found";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.