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

时间:2018-08-18 16:05:55

标签: javascript arrays json string

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

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

问题在于它总是返回“字符串”(变量的类型,而不是其值)。

1 个答案:

答案 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"))