TypeError:无法读取未定义的属性“ length”查找字符串中最短的单词| Codewars挑战

时间:2018-09-28 20:04:11

标签: javascript

我目前正在尝试创建一个函数来查找字符串中最短的单词。

问题:我遇到以下错误

TypeError:无法读取未定义的属性“ length”     在findShort     在Test.describe._     在/runner/frameworks/javascript/cw-2.js:152:11     在Promise._execute     在Promise._resolveFromExecutor     在新的承诺     在Object.describe     在/home/codewarrior/index.js:24:10     在/home/codewarrior/index.js:28:5     在Object.handleError

这是我的代码

+- Source    
|   
+-- repos   
    |   
    +--LearnGit
    |   
    +--TestGit        

2 个答案:

答案 0 :(得分:1)

我相信这是做您想要的事情的一种更简洁的方法:

console.log(findShort("turns out random test cases are easier than writing out basic ones"));

function findShort(s){
  let input = s;
  let array = input.split(" ");
  
  var shortest = array.reduce((shortestWord, currentWord) => {
    return currentWord.length < shortestWord.length ? currentWord : shortestWord;
  }, array[0]);
  return shortest;
}

https://jsfiddle.net/02z5oyh1/

答案 1 :(得分:1)

我看到两个问题:

  • 在循环的最后一次运行中,行let str = array[i + 1]将导致undefined。这是因为在最后一次运行时,i比数组长度小一个,因此i + 1不在数组范围之内。为了弥补这一点,请考虑将循环条件更改为i < array.length - 1

  • 第二,您正在将单词长度分配给shortestWord变量,在这里我认为您是要为其分配单词本身。

考虑到这两个更改,您可以像这样修改代码:

function findShort(s) {

  let array = s.split(" ");
  let shortestWord = array[0];
  
  for (i = 0; i < array.length - 1; i++) { // -1 here to compensate for the +1 on the next line.
    let str = array[i + 1];
    
    if (shortestWord.length > str.length) {
      shortestWord = str; // Just assign the word itself to this variable, not the length of it.
    }
    
  }
  
  return shortestWord;
}

const result = findShort("turns out random test cases are easier than writing out basic ones");
console.log(result);