JavaScript自定义数组切割问题:固定指定元素后取剩余元素异常
问题分析与修复
原代码的核心问题很明确:
- 硬从
EHE元素的下一个位置截取2个元素,完全没考虑BHE可能落在这个范围内,导致重复添加BHE元素 - 没有真正遵循「从整个原数组排序顺序中排除固定元素后选取剩余项」的需求,而是仅从
EHE后方取元素,逻辑不严谨
修正后的代码
// 通用处理函数,适配任意符合要求的已排序数组 function getFilteredData(arr) { // 提取固定的两个目标元素 const eheItem = arr.find(item => item.symbol === 'EHE'); const bheItem = arr.find(item => item.symbol === 'BHE'); // 过滤掉已固定的元素,严格保留原数组排序顺序 const remainingItems = arr.filter(item => item.symbol !== 'EHE' && item.symbol !== 'BHE'); // 组合固定元素与剩余元素的前2项 return [ eheItem, bheItem, ...remainingItems.slice(0, 2) ]; } // 测试原数据 const data = [ { symbol: 'EHE', name: 'John' }, { symbol: 'EHE-46', name: 'John' }, { symbol: 'EHE-24', name: 'John' }, { symbol: 'BHE-67', name: 'John' }, { symbol: 'BHE', name: 'John' }, { symbol: 'EHE-12', name: 'John' }, { symbol: 'BHE-23', name: 'John' }, { symbol: 'EHE-679', name: 'John' }, ]; console.log(getFilteredData(data)); // 测试异常数据 const notWorkingData = [ { symbol: 'EHE', name: 'John' }, { symbol: 'BHE', name: 'John' }, { symbol: 'EHE-12', name: 'John' }, { symbol: 'BHE-23', name: 'John' }, { symbol: 'EHE-679', name: 'John' }, { symbol: 'EHE-46', name: 'John' }, { symbol: 'EHE-24', name: 'John' }, { symbol: 'BHE-67', name: 'John' }, ]; console.log(getFilteredData(notWorkingData));
修正逻辑说明
- 精准提取固定元素:直接用
find获取EHE和BHE元素,避免索引操作的局限性 - 保留原序过滤剩余元素:通过
filter排除已固定的两个元素,完全保留原数组的排序规则 - 组合结果:将固定元素放在最前,再追加剩余元素的前2项,完全符合需求
注:你给出的期望输出中BHE-12应为笔误,实际notWorkingData中对应元素是EHE-12,修正后的代码输出会是符合原数组顺序的正确结果:
[ {"symbol":"EHE","name":"John"}, {"symbol":"BHE","name":"John"}, {"symbol":"EHE-12","name":"John"}, {"symbol":"BHE-23","name":"John"} ]
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

