我正在尝试编写一个函数,该函数返回字符串中最短单词的长度。它仅在某些时间有效,我似乎无法弄清楚为什么。
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;
}
答案 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
/ sort
或split
/ {{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
期间是否较短。如果是这样,那将成为您的遗言等等。