如何用JavaScript filter实现countNextSmaller函数?修正现有代码错误
修复countNextSmaller函数并使用filter实现正确逻辑
原代码存在两个核心问题:
- 仅检查当前元素的下一个元素,而非右侧所有元素
- 错误地将符合条件的元素值推入结果数组,而非统计符合条件的元素数量
以下是使用filter实现的正确版本:
function countNextSmaller(numbers) { return numbers.map((current, index) => { // 获取当前元素右侧的所有元素 const rightElements = numbers.slice(index + 1); // 筛选出右侧比当前元素小的元素,返回其数量 return rightElements.filter(num => num < current).length; }); }
代码逻辑说明:
- 使用
map遍历原数组的每个元素,同时获取当前元素的索引index - 通过
numbers.slice(index + 1)截取当前元素右侧的所有子数组 - 用
filter筛选出子数组中小于当前元素current的所有元素,再通过length获取筛选后的元素数量,作为当前位置的结果值
示例验证:
// 测试案例 console.log(countNextSmaller([5, 2, 6, 1])); // 输出 [2, 1, 1, 0]
解释:
- 5右侧的元素是[2,6,1],其中2和1比5小,数量为2
- 2右侧的元素是[6,1],其中1比2小,数量为1
- 6右侧的元素是[1],1比6小,数量为1
- 1右侧没有元素,数量为0
内容的提问来源于stack exchange,提问作者m.strilec
相关产品推荐
相关产品推荐

