function longestWord(string) {
var str = string.split(" ");
var longest = 0;
var word = null;
for (var i = 0; i < str.length - 1; i++) {
if (longest < str[i].length) {
longest = str[i].length;
word = str[i];
}
}
return word;
}
当我致电longestWord("Pride and Prejudice")
时,它会返回'Pride'而不是'偏见',这是最长的单词......为什么?我检查了一些其他类似的问题,但解决方案看起来很像我的代码。
答案 0 :(得分:17)
那是因为你没有比较数组中的所有项目,你遗漏了最后一项。
for (var i = 0; i < str.length - 1; i++)
应该是
for (var i = 0; i < str.length; i++)
或
for (var i = 0; i <= str.length - 1; i++)
答案 1 :(得分:10)
采用功能性方法解决此类问题的一个好处是,您甚至不必记住计数:
function longer(champ, contender) {
return (contender.length > champ.length) ? contender : champ;
}
function longestWord(str) {
var words = str.split(' ');
return words.reduce(longer);
}
有关详细信息,请参阅MDN Array.reduce。 (注意:reduce
需要填充IE8)
答案 2 :(得分:4)
你的情况是-1
,它甚至从未扫描过它:
for (var i = 0; i < str.length - 1; i++) {
应该是:
for (var i = 0; i < str.length; i++) {
答案 3 :(得分:4)
这是您使用forEach的解决方案,这将有助于您避免将来出现错误
function longestWord(string) {
var str = string.split(" ");
var longest = 0;
var word = null;
str.forEach(function(str) {
if (longest < str.length) {
longest = str.length;
word = str;
}
});
return word;
}
console.log(longestWord("pride and prejudice"));
您的原始问题只是str.length - 1
本来应该是str.length
,原来你不会得到数组的最后一个元素
答案 4 :(得分:3)
索引最高为str.length -1
:
for (var i = 0; i < str.length - 1; i++) {
所以最后一个字未经处理。
尝试使用:longestWord("Pride AAAAAAAAAAAAAAAAAAAAAAAAA and Prejudice")
。你会看到它有效(返回AAAAAAAAAAAAAAAAAAAAAAAAA
)。
如果您有疑问,最简单的解决方法是从-1
循环中删除for
。
for (var i = 0; i < str.length; i++) {
检查两个版本(有问题和固定版本)的演示:link here。
答案 5 :(得分:1)
您可以使用Lo-Dash这样的库来简化代码:
function longestWord(string) {
var words = string.split(' ');
return _.max(words, function(word) { return word.length; });
}
答案 6 :(得分:1)
我发现这里的.map方法有很多帮助(如果你想要单词的字符数,而不是单词本身):
function findLongestWord(str) {
var array = str.split(/\s+/);
var wordLength = array.map(function(i) {
return i.length;
});
var largest = Math.max.apply(Math, wordLength);
return largest;
}
答案 7 :(得分:1)
function longestWord(sent){
var arr = sent.match(/[a-z]+/gi);
arr.sort(function(a, b){
return b.length - a.length;
});
return arr[0];
}
longestWord('hello man@#$%');
// ==> output: hello
答案 8 :(得分:1)
这可以解决问题吗?
function longestWord(string) {
var str = string.split(" ");
var longest = 0;
var word = null;
for (var i = 0; i <= str.length - 1; i++) {
if (longest < str[i].length) {
longest = str[i].length;
word = str[i];
}
}
return word;
}
document.write(longestWord("pride and prejudice"));
答案 9 :(得分:1)
ForEach在FF中更快但在Chrome中更慢, 但对于缓存长度和函数的循环,在FF和chrome中,apply / call的速度要快得多。
希望以下代码有所帮助:
function getLongest (arrStr) {
var longest = 0, word;
for(var i=0 , len = arrStr.length ; i < len ; i++){
if(longest < arrStr[i].length) {
longest =arrStr[i].length;
word = arrStr[i];
}
}
return word;
}
function isLongest (str) {
var arrayStr = str.split(' ');
return function(fn) {
return fn.apply(this,[arrayStr]);
}
}
isLongest("hello aaaaaaaaaaaaaaaaaaaaaaaaa bbb")(getLongest); //aaaaaaaaaaaaaaaaaaaaaaaaa
答案 10 :(得分:1)
for (var i = 0; i < str.length - 1; i++)
到
for (var i = 0; i <= str.length - 1; i++)
OR
for (var i = 0; i < str.length; i++)
答案 11 :(得分:0)
// My simple solution.
const findLongestWordLength = str => {
let array = str.split(" ");
let longest = 0;
array.map(e => {
if (e.length > longest) {
longest = e.length;
}
})
return longest;
}
答案 12 :(得分:0)
function LongestWord(sen) {
// code goes here
const wordsArray = sen.split('').map(c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c<='9')? c : ' ').join('').split(' ').filter(item => item !== '');
wordsArray.sort((a, b) => a.length < b.length);
return wordsArray[0];
}
答案 13 :(得分:0)
解决方案不完整。如果存在2个或更多相同长度的单词怎么办?这是一个更好的解决方案:
longest = str => {
let words = str.split(" ");
let size = 0;
let max = [""];
for (let i = 0; i < words.length; i++) {
if (words[i].length > size) {
size = words[i].length;
}
if (max[max.length - 1].length < words[i].length) {
max = [];
max.push(words[i]);
} else {
max = [...max, words[i]];
}
}
return max;
};
答案 14 :(得分:0)
我将带您参阅this很棒的文章,该文章定义了三种方式:
1-查找带有FOR循环的最长单词
function findLongestWord(str) {
var strSplit = str.split(' ');
var longestWord = 0;
for(var i = 0; i < strSplit.length; i++){
if(strSplit[i].length > longestWord){
longestWord = strSplit[i].length;
}
}
return longestWord;
}
findLongestWord("The quick brown fox jumped over the lazy dog");
2-使用sort()方法查找最长的单词
function findLongestWord(str) {
var longestWord = str.split(' ').sort(function(a, b) { return b.length - a.length; });
return longestWord[0].length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");
3-使用reduce()方法找到最长的单词
function findLongestWord(str) {
var longestWord = str.split(' ').reduce(function(longest, currentWord) {
return currentWord.length > longest.length ? currentWord : longest;
}, "");
return longestWord.length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");
当然,如果您要获取字符串,它会返回最大单词的长度,只需除去返回部分的长度即可。
答案 15 :(得分:0)
function findLongestWord(str) {
let stringArray = str.split(" ");
stringArray.sort(function(a, b){
return a.split('').length < b.split('').length;
})
return stringArray[0];
}
findLongestWord("The quick brown fox jumped over the lazy dog");
答案 16 :(得分:0)
function sortNumber(a, b) {
return a - b;
}
function findLongestWordLength(str) {
var split = str.split(" ");
var arr=[];
for(var i=0;i<split.length;i++){
arr.push(split[i].length);
}
arr.sort(sortNumber);
console.log(arr[arr.length-1]);
return(arr[arr.length-1]);
}
findLongestWordLength("What if we try a super-long word such as otorhinolaryngology");
答案 17 :(得分:0)
下面的代码将从字符串中找到最大的单词及其长度。 代码是纯JavaScript和HTML。
--enable-maintainer-zts
function findLongestWord() {
var str = document.getElementById('inputText').value;
calculateLength(str);
}
function calculateLength(str) {
var substring = str.split(" ");
var minChar = '';
for (var i = 0; i <= substring.length - 1; i++) {
if (substring[i].length >= minChar.length) {
minChar = substring[i];
}
}
document.getElementById('longChar').innerHTML = 'Longest Word: ' + minChar;
document.getElementById('longCharLength').innerHTML = 'Longest Word length: ' + minChar.length;
}
答案 18 :(得分:0)
const longestWord = string =>
{
stringArray = string.split(' ').sort(
(a,b) => b.length - a.length)
let longestArray= stringArray.filter( word => word.length === stringArray[0].length )
if(longestArray.length === 1){
console.log(longestArray[0])
}
else
{
console.log(longestArray)
}
}
longestWord("Pride and Prejudice")
答案 19 :(得分:0)
另一种方法是使用sort:
function longestWord(string) {
let longest = 0;
let str = str.split(" ").sort((word1,word2)=>{
});
return str[0].length;
}
longestWord('I love Python ')
答案 20 :(得分:0)
尝试这个
function longest(string) {
var str = string.split(" ");
var longest = 0;
var word = null;
for (var i = 0; i <= str.length - 1; i++) {
if (longest < str[i].length) {
longest = str[i].length;
word = str[i];
}
}
return word;
}
答案 21 :(得分:0)
使用sort()方法,它按一些排序标准对数组的元素进行排序,然后返回该数组的第一个元素的长度,从而返回最长的单词。
function longest(string){
var longestWord = string.split(' ').sort(function(a,b){
return b.length - a.length;
});
return longestWord[0];
}
答案 22 :(得分:0)
这是另一种解决方法。
function findLongestWord(str) {
var result = [];
var one = str.split(" ");
for (var i = 0; i < one.length; i++) {
result[i] = one[i].length;
result.reverse().sort(function(a,b) {
return b-a;
});
}
return result[0];
}
答案 23 :(得分:0)
我认为这更容易
function findLongestWord(str) {
var longestStr = 0;
for (var x=0;x<str.split(' ').length;x++){
if (longestStr < str.split(' ')[x].length){
longestStr = str.split(' ')[x].length;
}
}
return longestStr;
}
答案 24 :(得分:0)
我想说使用forEach循环是最容易理解的版本
function longestWord(sen) {
big_word = ""
words = sen.split(" ")
words.forEach(function(word){
if (word.length > big_word.length){
big_word = word
};
});
return big_word
};
答案 25 :(得分:0)
这似乎是最简单的方法。
function longestWord(string) {
var str = string.split(" ");
var longest = 0;
var word = null;
str.forEach(function(str) {
if (longest < str.length) {
longest = str.length;
word = str;
}
});
return word;
}
答案 26 :(得分:0)
谢谢大家,这是固定代码:
function longestWord(string) {
var str = string.split(" ");
var longest = 0;
var word = null;
for (var i = 0; i < str.length; i++) {
var checkedLetters = "";
for (var j = 0; j < str[i].length; j++) {
if (/[a-zA-Z]/.test(str[i][j])) {
checkedLetters += str[i][j];
}
if (longest < checkedLetters.length) {
longest = checkedLetters.length;
word = checkedLetters;
}
}
}
return word;
}
答案 27 :(得分:0)
您需要使用:
for (var i=0;i<=str.length - 1; i++)
这样会扫描整个短语
答案 28 :(得分:0)
是否有特定原因
for (var i = 0; i < str.length - 1; i++)
不是
for (var i = 0; i < str.length - 1; i++)
这似乎可能是原因。
答案 29 :(得分:-1)
function longestWord(string) {
var str = string.split(" ");
var longest = 0;
var word = null;
for (var i=0; i < str.length-1; i++) {
word = longest < str[i].length ? str[i].length : longest;
word = str[i];
}
return word;
}
longestWord('I love Python ')
答案 30 :(得分:-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;
}