Все самые длинные строки. - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в кодировании.Я хочу вернуть все самые длинные строки одинаковой длины.Когда я запускаю его, я получаю:

RangeError: Maximum call stack size exceeded.
at arrayOfStrings:8:10

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

function arrayOfStrings(allLLongestStrings) {

allLLongestStrings => {
let maxLng = Math.max(...arrayOfStrings.map( elem => elem.length))
return arrayOfStrings.filter(elem => elem.length === maxLng)
}
return arrayOfStrings();
}

arrayOfStrings(
[
'otorhinolaryngological', 
'Otorhinolaryngological', 
'Psychophysicotherapeutics', 
'Thyroparathyroidectomized', 
'Pneumoencephalographically', 
'Radioimmunoelectrophoresis', 
'Psychoneuroendocrinological', 
'Hepaticocholangiogastrostomy', 
'Spectrophotofluorometrically', 
'Antidisestablishmentarianism'
]
);

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Попробуйте отсортировать массив по длине и затем выбрать первый элемент массива.

function arrayOfStrings(arr) {

return arr.sort((a, b) => b.length - a.length)[0]

}

Извините, если вы намеревались что-то другое, но я не мог понять ваш код, поэтому я решилВы хотели строку с максимальной длиной в массиве.

0 голосов
/ 06 декабря 2018

Ниже приведен подход, который я бы использовал, чтобы получить самые длинные строки из массива.Комментарии к коду объясняют логику:

function getLongest(a) {
  //Find the length of the longest word in the array
  var maxLength = Math.max(...a.map(s => s.length));
  //Return array after filtering words with length less than maxLength.
  return a.filter(s => s.length === maxLength);
}

console.log(getLongest([
  'otorhinolaryngological',
  'Otorhinolaryngological',
  'Psychophysicotherapeutics',
  'Thyroparathyroidectomized',
  'Pneumoencephalographically',
  'Radioimmunoelectrophoresis',
  'Psychoneuroendocrinological',
  'Hepaticocholangiogastrostomy',
  'Spectrophotofluorometrically',
  'Antidisestablishmentarianism'
]));

Этот код будет работать только в среде ES6, поскольку он использует синтаксис распространения

0 голосов
/ 26 ноября 2018

Я бы предложил использовать другой подход, уменьшив массив и проверив, больше ли фактическая строка, чем последняя сохраненная строка, затем возьмите новый массив с этой строкой, в противном случае проверьте длину, и если он имеет то же самое, возьмитестрока для временного набора результатов.

function getLongestStrings(array) {
    return array.reduce((r, s, i) => {
        if (!i || r[0].length < s.length) { // first or longer string
            return [s];
        }
        if (r[0].length === s.length) {     // same length
            r.push(s);
        }
        return r;
    }, []);
}

console.log(getLongestStrings(['otorhinolaryngological', 'Otorhinolaryngological', 'Psychophysicotherapeutics', 'Thyroparathyroidectomized', 'Pneumoencephalographically', 'Radioimmunoelectrophoresis', 'Psychoneuroendocrinological', 'Hepaticocholangiogastrostomy', 'Spectrophotofluorometrically', 'Antidisestablishmentarianism']));
...