Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回字符串中最长单词的长度(Javascript)_Javascript_Arrays_String - Fatal编程技术网

返回字符串中最长单词的长度(Javascript)

返回字符串中最长单词的长度(Javascript),javascript,arrays,string,Javascript,Arrays,String,期望的结果是给定字符串中最长单词的长度(数字) 例如:findLongestWord(‘我喜欢玉米饼’);=>五, 当我从末尾开始循环时,会收到“无法读取未定义长度”错误消息,并且当我向前开始循环时,只会收到第一个新值“longest”。我错过了什么 function findLongestWord(string) { var longest = 0; var array = string.split(' '); for (var i = array.length; i >=

期望的结果是给定字符串中最长单词的长度(数字)

例如:findLongestWord(‘我喜欢玉米饼’);=>五,

当我从末尾开始循环时,会收到“无法读取未定义长度”错误消息,并且当我向前开始循环时,只会收到第一个新值“longest”。我错过了什么

function findLongestWord(string) {
  var longest = 0;
  var array = string.split(' ');
  for (var i = array.length; i >= 0; i--) {
    if (array[i].length > longest) {
        longest = array[i].length;
    }
  }
  return longest;
}

将for更改为
for(var i=array.length-1;i>=0;i--){


如果数组索引中有
4
个元素从
0
开始到
3
,那么在这种情况下
array[4]
未定义的

您的
for
循环首先在
i
索引上运行,该索引指向
数组。长度
,您试图使用
未定义的
值访问该数组

从中获取,数组长度返回一个32位整数,即 始终在数值上大于数组的最高索引

简而言之,
array.length
是基于零的索引。

因此,将您的代码修改为这样就可以了

function findLongestWord(string) {
  var longest = 0;
  var array = string.split(' ');
  for (var i = array.length - 1; i >= 0; i--) {
    if (array[i].length > longest) {
        longest = array[i].length;
    }
  }
  return longest;
}
但是,这里有另一种方法你可以做到这一点

function findLongestWord(str){
  var longestWord = '';
  str.split(' ').forEach(function (v) {
    longestWord = v.length > longestWord.length ? v : longestWord
  });
  return longestWord;
}

var word = findLongestWord('I like tacos');
console.log(longestWord, longestWord.length);
// tacos 5

array.length返回n,数组中的元素数,当我们使用索引从数组中获取元素时,它是从0到n-1。
因此,您将不得不使用array.length-1而不是array.length。

谢谢大家的宝贵建议!我现在看到有更干净/更短的方法来处理这个玩具问题,但我还是将“length-1”添加到了我的循环中,因为这与我自己提出的最接近


谢谢!

使用
.sort
将很容易。当您按DESC顺序对数组进行排序时,只需索引0即可获得最长的字符串

function findLongestWord(string) {       
  var array = string.split(' ');
  longest = array.sort(function(a,b){
      return a.length < b.length;
  });
  return longest[0].length;
  }
函数findLongestWord(字符串){
var数组=string.split(“”);
最长=数组.排序(函数(a,b){
返回a.length
var i=array.length-1
开始(我猜不出在向前运行循环时发生了什么错误,因为你没有为此显示特定的代码。)只需执行:
for(var i=array.length;i-->){
数组。reduce((res,s)=>Math.max(res,s.length),0)
甚至更短(完整代码):
Math.max(…string.split(“”).map(a=>a.length));
string.split(“”)
只搜索空格,但忽略换行符、标点符号等。分隔单词的更好方法是
string.split(/[\W\b]+/)