我正在尝试编写一个基本的javascript函数来查找字符串中最长的单词并记录它的长度。
到目前为止,我有:
function findLongestWord(str) {
var words = [];
var longest = [];
words.push(str.split(" "));
for(var i = 0; i < words.length; i++){
if (words[i].length > longest[0].length){
longest.push(words[i]);
}
}
return longest[0].length;
}
findLongestWord('The quick brown fox jumped over the lazy dog');
这对我来说很有意义,但却给了我一个错误。我尝试了console.logging每一步,它在for循环中失败。
答案 0 :(得分:3)
使用words.push(str.split(" "))
时,数组words
看起来像
[
["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
]
另一个问题是当您在longest[0].length
中检查for
第一次迭代时,它是undefined
。这会导致错误
未捕获的TypeError:无法读取属性&#39;长度&#39;未定义的
要解决此问题,您可以将longest
用作string
而不是array
。在for
中,将length
大于当前longest
字符串的字符串指定给它。
在函数结束时,您可以返回longest
字符串。
<强>问题/建议:强>
str.split(' ')
直接分配到words
变量longest
作为string
变量而不是array
而initialize
用于清空字符串,即''
,以避免上述错误longest
的长度与words
数组words
数组中字符串的长度大于longest
,请更新longest
。\s+
split
字符串空格
function findLongestWord(str) {
var words = str.split(/\s+/);
var longest = '';
for (var i = 0; i < words.length; i++) {
if (words[i].length > longest.length) {
longest = words[i];
}
}
return longest;
}
var longestWord = findLongestWord('The quick brown fox jumped over the lazy dog');
document.write('Longest Word: "' + longestWord + '"');
document.write('<br />Longest Word Length: ' + longestWord.length);
&#13;
答案 1 :(得分:1)
您可以使用Array.prototype.sort
和Array.prototype.shift
大大简化此操作。例如
SPA
Single Page Application
var str = 'The quick brown fox jumped over the lazy dog',
longest = str.split(' ').sort(function(a, b) {
return b.length - a.length;
}).shift();
document.getElementById('word').innerHTML = longest;
document.getElementById('length').innerHTML = longest.length;
将生成按其长度排序的字符串数组(最长到最短),<p id="word"></p>
<p id="length"></p>
抓取第一个元素。您还可以使用sort()
和shift()
代替return a.length - b.length
以另一种方式(最短到最长)进行排序,以获取最后一个元素。
答案 2 :(得分:1)
尝试
function longestWord(string) {
var str = string.split(" ");
var longest = 0;
var word = null;
for (var i = 0; i < str.length; i++) {
if (longest < str[i].length) {
longest = str[i].length;
word = str[i];
}
}
return word;
}
答案 3 :(得分:1)
function findLongestWord(str) {
var arr=str.split(" ");
var sarr=arr.sort(function(a,b){return b.length-a.length;});
str=sarr[0];
return str.length;
}
使用javascript Array.prototype.sort()
我们可以优雅地解决这个问题,而无需使用循环
答案 4 :(得分:0)
if (words[i].length > longest[0].length)
您将在上面收到错误。与第一次一样,它是空的。
答案 5 :(得分:0)
您的陈述
words.push(str.split(" "));
应该是
words=str.split(" ")
@Tushar解决了你的其他问题&#34;太......; - )
答案 6 :(得分:0)
这是另一个较短的版本:
function findTheLongestWord(str) {
var temp = '';
(str || "").split(/\s+/).forEach(function(word) {
temp = word.length > temp.length && word || temp;
});
return "longest word is: " + temp + " and it's length is: " + temp.length;
}
alert (findTheLongestWord("The quick brown fox jumped over the lazy dog, once again!"));
&#13;
答案 7 :(得分:-1)
要在Java中找到最长的关键字字符串,您需要编写一个程序。
square = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
entered = [];
for r in range(3):
for c in range(3):
v = int(input("Enter a number 1-9 (can't enter the same number again): "))
if v > 9 or v < 1 or v in entered:
print("bad number")
entered.append(v)
square[r][c]=v