我试图使用forEach循环返回数组中最长的偶数字并返回" 00"什么时候没有单词。我能够获得返回最长的偶数单词以正常工作的部分,但是当我引入else语句时它不再起作用了:
function FindlongestWord(input) {
var arrWords = input.split(' ');
var wordlength = 0;
var word = '';
arrWords.forEach(function(wrd) {
if (wordlength < wrd.length && wrd.length % 2 == 0) {
wordlength = wrd.length;
word = wrd;
} else {
return "00";
}
});
return word;
}
答案 0 :(得分:4)
您的return "00"
语句仅从内部函数返回,而不是从FindlongestWord(input)
函数返回。
您可以使用&#34; 00&#34;初始化您的单词。那么它将返回&#34; 00&#34;如果没有在forEach中设置。
function FindlongestWord(input) {
var arrWords = input.split(' ');
var wordlength = 0;
var word = '00';
arrWords.forEach(function(wrd) {
if (wordlength < wrd.length && wrd.length % 2 == 0) {
wordlength = wrd.length;
word = wrd;
}
});
return word;
}
答案 1 :(得分:0)
正如其他人已经解释的那样:forEach
函数忽略了回调函数的返回值,因此返回&#39; 00&#39;那里。
以下是另一种使用filter
和reduce
代替forEach
的解决方案。它不需要保持和更新回调之外的变量:
function FindLongestEvenWord(input) {
var arrWords = input.split(' ');
var r = arrWords.filter(function(w) {
return w.length % 2 == 0;
}).reduce(function(res, w) {
return (w.length > res.length) ? w : res;
}, "");
return r == "" ? "00" : r;
}