簡體   English   中英

If / Else語句大括號

[英]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。 它僅檢查第一項。

在您的第一個版本中, elsefor循環內,因此該函數在其第一次迭代中將始終返回“已找到”或“未找到”。 該循環將永遠不會達到其第二次迭代。

在您的第二個版本中, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM