为什么我的数组未处理?

时间:2018-07-21 11:48:32

标签: javascript arrays

我有1000个值的数组。

var city = city_str.split(',');

是按字母顺序排列的城市。

我具有搜索以自变量声明的字母开头的第一个单词的功能。

function searchWord(letter){
    letter = letter.toUpperCase();
    var letters = city.map(n => n[0]);
    var word = '';
    var flag = false;
    for (var i = 0; (i<= letters.length)&&(flag); i++){
        if (letter == letters[i]) {
            word = city[i];
            flag = true;
        }
    }
    if (word == '') {
        return 0;
    }
    else return word;
}

但总是返回0。为什么?

2 个答案:

答案 0 :(得分:1)

一开始,您的for循环条件(i<= letters.length)&&(flag)为假,因为您要求flagtrue,但您已设置{{1} }到flag就在循环之前。请记住,false的意思是“和”。

您可能是说&&。另外,请注意,在将!flag<进行比较时,您需要<=,而不是i。因此:letters.length

还请注意,您不需要这些括号,并且我可以谨记建议i < letters.length && !flag和缩进的一致使用。所以:

{}

或者您可以从循环内返回而完全避免使用function searchWord(letter){ letter = letter.toUpperCase(); var letters = city.map(n => n[0]); var word = ''; var flag = false; for (var i = 0; !flag && i < letters.length; i++) { if (letter == letters[i]) { word = city[i]; flag = true; } } if (word == '') { return 0; } else { return word; } } (和flag):

word

实际上,您可以完全避免使用function searchWord(letter){ letter = letter.toUpperCase(); var letters = city.map(n => n[0]); for (var i = 0; i < letters.length; i++) { if (letter == letters[i]) { return city[i]; } } return 0; } ,因为如果for是一个数组(我假设来自city),则可以使用find

map

function searchWord(letter){ letter = letter.toUpperCase(); return city.find(n => n[0] == letter) || 0; } 反复调用您的回调,直到它返回真实值或用尽所有条目。如果回调函数返回真实值,则find的返回值就是回调函数所针对的条目;否则,返回find。由于我们知道undefined中的单词不会虚假,因此我们可以安全地使用city将该|| 0转换为undefined

答案 1 :(得分:0)

这是因为条件导致循环未执行

for (var i = 0; (i<= letters.length)&&(flag); i++)

flag设置为false。因此,您的循环将不会执行。

将此行更改为:

for (var i = 0; (i< letters.length)&&(!flag); i++)