我想创建一个函数,该函数将字符串作为参数并提取最长的单词。如果有多个相同长度(最大)的单词,它将提取第一个单词。 (顺便说一句,该函数将忽略数字和标点符号)。无论如何,这是代码:
function extractLongest(testString){
var lenArr = [];
var finalResult = "";
window.onload = function(){
testString = testString.replace(/[^a-z " "]/gi, '');
testString = testString.split(" ");
for (var counter = 0; counter < testString.length; counter++){
lenArr[counter] = parseInt(testString[counter].length);
}
lenArr = lenArr.sort();
for (var counterTwo = 0; counterTwo < testString.length; counterTwo++){
if(parseInt(testString[counterTwo].length) == Math.max(...lenArr)){
finalResult = testString[counterTwo];
break;
}
}
}
return finalResult;
}
问题在于它总是返回“字符串”(变量的类型,而不是其值)。
答案 0 :(得分:3)
问题是您在函数内使用window.onload
。这仅在窗口上设置处理程序,该处理程序仅在触发onload
事件时运行。您的函数会执行此操作,然后立即返回finalReuslts
,它仍然是一个空字符串。大概,您希望在调用该函数时运行所有这些代码。目前尚不清楚为什么要这么做。删除它会使该功能起作用:
function extractLongest(testString){
var lenArr = [];
var finalResult = "";
testString = testString.replace(/[^a-z " "]/gi, '');
testString = testString.split(" ");
for (var counter = 0; counter < testString.length; counter++){
lenArr[counter] = parseInt(testString[counter].length);
}
lenArr = lenArr.sort();
for (var counterTwo = 0; counterTwo < testString.length; counterTwo++){
if(parseInt(testString[counterTwo].length) == Math.max(...lenArr)){
finalResult = testString[counterTwo];
break;
}
}
return finalResult;
}
console.log(extractLongest("hello my name is stephen"))
如果有用的话,可以使用一种更简单的方法来使用reduce()
:
function extractLongest(testString){
testString = testString.replace(/[^a-z " "]/gi, '');
testString = testString.split(" ");
return testString.reduce(function(a, b) {
return a.length > b.length ? a : b
});
}
console.log(extractLongest("hello my designation is stephen"))