JavaScript найти предложение с наибольшим количеством слов - PullRequest
0 голосов
/ 21 января 2020

Мне нужно знать, почему это не так ... Я пытаюсь создать функцию, которая находит предложение с наибольшим количеством слов в нем и возвращает количество слов. Это выглядит для точек. вопросительные знаки ? и восклицательные знаки!

const numberOfWords = (string) => {
  let sentenceArray = string.match(/.*?[?!.]/g)
  let mostWords =
    sentenceArray.reduce((sentence1, sentence2) => 
    (sentence1.split('').length < sentence2.split   ('').length ?
        sentence1 = sentence2
        :
        sentence1
    )) 
  return mostWords.split(' ').length
}

Это сработало с этой строкой в ​​качестве теста: «Это предложение. Это другое? Думаю?»

, возвращающее 4, но в некоторых случаях добавляется дополнительный номер к нему? Я хочу понять почему! Примерно так: «Как насчет этого? Подожди! Я думаю, что это должно быть самым длинным. Я думаю, что это должно быть самым длинным и дольше». // возвращает последнее предложение как 11 слов, но оно должно быть 10.

Ответы [ 2 ]

3 голосов
/ 21 января 2020

Вы должны trim() строку перед расщеплением и взятием длины :

const numberOfWords = (string) => {
  let sentenceArray = string.match(/.*?[?!.]/g)
  let mostWords =
    sentenceArray.reduce((sentence1, sentence2) => 
    (sentence1.trim().split('').length < sentence2.trim().split('').length ?
        sentence1 = sentence2
        :
        sentence1
    )) 
  return mostWords.trim().split(' ').length
}
console.log(numberOfWords(`How about this one?Wait! I think this should be the longest. I think this one should be the longest even longer.`))
1 голос
/ 21 января 2020

Не могли бы вы попробовать это

const numberOfWords = (string) => {
    let sentenceArray = string.split(/[?!.,\/-]/);
    console.log(sentenceArray);
    let mostWords =
        sentenceArray.sort((sentence1, sentence2) =>
            sentence1.trim().split(' ').length + sentence2.trim().split(' ').length)
    return mostWords[0].trim().split(' ').length
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...