You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

修正逻辑说明

  1. 精准提取固定元素:直接用find获取EHE和BHE元素,避免索引操作的局限性
  2. 保留原序过滤剩余元素:通过filter排除已固定的两个元素,完全保留原数组的排序规则
  3. 组合结果:将固定元素放在最前,再追加剩余元素的前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:47:33