我是编码新手。我想返回所有长度相等的最长字符串。当我运行它时,我得到:
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'
]
);
答案 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