javascript - 获取最长的单词 - JS

标签 javascript arrays

我正在编写一个返回给定数组中最长字符串的函数。如果数组为空,它应该返回一个空字符串 ("")。如果数组不包含字符串;它应该返回一个空字符串。

function longestWord(arr) {
 var filtered = arr.filter(function(el) { return typeof el == 'number' });
  if (filtered.length > 0) {
    return Math.min.apply(Math, filtered);
  } else {
    return 0;
  }
}

var output = longestWord([3, 'word', 5, 'up', 3, 1]);
console.log(output); // --> must be 'word'

现在我的代码不会提取单词,而是提取数字。知道我错过了什么吗?

最佳答案

让我们浏览一下您的代码。

longestWord 函数的第一行:

var filtered = arr.filter(function(el) { return typeof el == 'number' });

将根据 typeof el === 'number' 过滤输入数组,这将返回一个仅包含输入数组元素的数组,这些元素是 type of === number

由于目标是找到最长的单词,因此应该将其更改为:

var filtered = arr.filter(function(el) { return typeof el === 'string' });

这将返回输入数组中的字符串数组。

接下来,检查过滤后的数组是否为空。如果数组为空,则返回 0。你的说明说如果数组为空,或者如果数组不包含字符串,它应该返回一个空字符串。所以我们应该将其更改为:

return "";

如果数组不为空,或包含字符串,则返回 Math.min.apply(Math, filtered)。该语句将返回数组的最小值,因此可能不是您想要的。毕竟,目标是返回最长的字符串。

为此我们可以使用多种方法,这里是一个:

filtered.reduce(function(a, b) { return a.length > b.length ? a : b })

此语句使用 reduce()方法遍历数组并返回最长的项目。

综合起来我们得到:

function longestWord(arr) {
  var filtered = arr.filter(function(el) { return typeof el === 'string' });
  if (filtered.length > 0) {
    return filtered.reduce(function(a, b) { return a.length >= b.length ? a : b });
  } else {
    return "";
  }
}

console.log(longestWord([3, 'word', 5, 'up', 3, 'testing', 1]));
console.log(longestWord([]));
console.log(longestWord([1, 2, 3, 4, 5]))
console.log(longestWord(['some', 'long', 'four', 'char', 'strs']))

关于javascript - 获取最长的单词 - JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44689935/

相关文章:

javascript - toggleClass 用于执行两种不同的 scrollTop 方法,不起作用

javascript - 从 json 响应创建列表菜单

javascript - 如何使用ajax调用+ javascript将数据从数据库导出到excel

JavaScript 遍历数组

c++ - 如何创建继承类对象的数组?

arrays - PostgreSQL:连接具有不同元素维度的嵌套数组

javascript - 如何将javascript变量传递给jSTL代码

javascript - 带有顶部、底部和溢出的侧边导航

javascript - 语法 - 变量声明两边的方括号是什么意思

arrays - Bash - 通过每个镜像处理元统计数据