如何从数组中提取最长的单词?JavaScript/JSON



我想创建一个函数,该函数将字符串作为其参数并提取最长的单词。如果有多个相同长度(max(的单词,它将提取第一个单词。(顺便说一下,该函数忽略数字和标点符号(。无论如何,这是代码:

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;
}

问题是它总是返回"字符串"(变量的类型,而不是其值(。

问题是你在函数中使用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"))

最新更新