所有最长的字符串。

时间:2018-11-26 15:00:43

标签: javascript arrays string methods

我是编码新手。我想返回所有长度相等的最长字符串。当我运行它时,我得到:

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 :(得分:0)

我建议使用不同的方法,减少数组并检查实际字符串是否长于最后存储的字符串,然后使用此字符串获取一个新数组,否则检查长度,如果长度相同则采用临时结果集的字符串。

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']));

答案 1 :(得分:0)

尝试按长度对数组进行排序,然后挑选出数组的第一个元素。

function arrayOfStrings(arr) {

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

}

很抱歉,如果您想要其他东西,但由于我听不懂您的代码,因此我想通了 您想要在数组中使用最大长度的字符串。

答案 2 :(得分:0)

下面是我要从数组中获取最长字符串的一种方法。代码注释解释了逻辑:

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环境中有效,因为它利用了spread syntax