其他声明不起作用

时间:2017-07-27 22:21:16

标签: javascript arrays if-statement foreach

我试图使用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;
}

2 个答案:

答案 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;那里。

以下是另一种使用filterreduce代替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;
}