返回JavaScript中字符串中最短单词的长度

时间:2019-06-29 04:10:56

标签: javascript arrays algorithm function

我正在尝试编写一个函数,该函数返回字符串中最短单词的长度。它仅在某些时间有效,我似乎无法弄清楚为什么。

function findShort(s) {
  const stringArray = s.split(" ");

// Compares the length of two words, then moves to the next till complete.
// Returns the words in order of length 
  const orderedArray = stringArray.sort((a, b) => {
    return a.length > b.length;
  })
  //returns the length of the first word(0 index of array) 
  return orderedArray[0].length;

}

2 个答案:

答案 0 :(得分:2)

您需要从sort()返回一个数字,而不是布尔值。 sort()函数应为:

const orderedArray = stringArray.sort((a, b) => {
   return a.length - b.length;
})

function findShort(s) {
  const stringArray = s.split(" ");
  const orderedArray = stringArray.sort((a, b) => {
    return a.length - b.length
  })
  return orderedArray[0].length;

}
console.log(findShort("The quick brown fox ju map"))

您不需要sort()整个数组,只需使用map()来获取长度数组,然后将其传递给Math.min

const findShort = str => Math.min(...str.split(' ').map(x => x.length))
console.log(findShort("The quick brown fox ju map"))

答案 1 :(得分:0)

在我看来,使用函数似乎没有解决句子以empty string开头或结尾的特殊情况,并且没有提供numeric value的排序函数(与布尔值比较)。例如:

function findShort(s) {
  const stringArray = s.split(" ");  // <-- no .trim()
  const orderedArray = stringArray.sort((a, b) => {
    return a.length - b.length;  // - instead of >
  })
  return orderedArray[0].length;
}

console.log(findShort(" try set manually "))  // 0 is wrong here

如果我们通过String.trim解决此问题,您将得到:

function findShort(s) {
  const stringArray = s.trim().split(" ");
  const orderedArray = stringArray.sort((a, b) => {
    return a.length - b.length;
  })
  return orderedArray[0].length;
}

console.log(findShort(" try set manually "))  // 3 is correct now!

使用Array.sort是实现此目标的一种方法,它在其ES6 variant中或多或少会是这样的:

let findShort = s => s
  .trim()            // <-- making sure we remove any spaces at start and end
  .split(' ')        // <-- get the words from the sentence
  .sort((a, b) => a.length - b.length)[0]  // <-- sort & take the 1st element
  .length

console.log(findShort("in case users"))       // 2
console.log(findShort(" try set manually "))  // 3
console.log(findShort("A great story"))       // 1

您还可以编写自己的函数,该函数总体上会更高效,因为它不需要多次遍历数组(split / sortsplit / {{1 }} / map等。

类似这样的东西:

Math.min

您将在哪里循环let findShort = str => { let t = '', r = str, s = str.trim() for(let i=0; i<s.length; i++) { !!s[i].trim() ? t += str[i] : (r = t.length < r.length ? t : r, t='') } r = t.length < r.length ? t : r return r.length } console.log(findShort("in case users")) // 2 console.log(findShort(" try set manually ")) // 3 console.log(findShort("A great story")) // 1并跟踪最后一个单词。您可以通过简单地检查长度来继续检查新one time only期间是否较短。如果是这样,那将成为您的遗言等等。