【问题标题】:All Longest Strings.所有最长的字符串。
【发布时间】:2019-04-28 06:15:14
【问题描述】:

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

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

【问题讨论】:

  • 目前尚不清楚您要达到的目标。 arrayOfStrings是一个函数还是一个数组,让你在上面做filter?为什么函数中有箭头函数?请修正你的命名,消除命名冲突并修正你的语法。
  • 数组名和函数名混用了。
  • return arrayOfStrings(); 你有一个递归调用,它接受零参数并且没有基本情况来打破你的递归。

标签: javascript arrays string methods


【解决方案1】:

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

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

【讨论】:

  • 谢谢。这有帮助!
【解决方案2】:

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

function arrayOfStrings(arr) {

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

}

很抱歉,如果您打算做其他事情,但我无法理解您的代码,所以我想 你想要数组中长度最大的字符串。

【讨论】:

  • 在发布模棱两可的答案之前,请考虑发表评论并找出问题的确切含义。
【解决方案3】:

以下是我从数组中获取最长字符串的方法。代码cmets解释逻辑:

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

【讨论】:

    【解决方案4】:
    function allLongestStrings(inputArray) {
        const s = inputArray
        const m = inputArray.map((e) => {
            return e.length
        }).sort((a, b) => b - a)[0]
        
        return s.filter((b) => {
            if ( b.length === m ) return b
        })
    }
    

    【讨论】:

    • 欢迎来到 StackOverflow。请用更多信息和解释扩展您的答案,因此它不仅仅是一个无法解释的代码块。
    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    相关资源
    最近更新 更多