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

JavaScript如何按指定键排序对象数组并移除最高值类元素

按指定字段分组排序并排除前N类数据的实现

需求说明

给定存储项目对象的数组,每个对象包含project_name字段,需要实现以下逻辑:

  • 数组内所有对象按project_name字段值从高到低排序
  • 支持配置参数N,排除排序后project_name值最高的前N个分类的全部数据,返回剩余数据集

示例规则:N=1时,排除值最高的C类所有条目,返回B、A类排序后的结果

原始输入数据

const sourceList = [
  {
    "project_name": "A",
    "key1": "value1"
  },
  {
    "project_name": "B",
    "key1": "value1"
  },
  {
    "project_name": "B",
    "key1": "value1"
  },
  {
    "project_name": "B",
    "key1": "value1"
  },
  {
    "project_name": "A",
    "key1": "value1"
  },
  {
    "project_name": "C",
    "key1": "value1"
  }
]

实现代码

针对大数组场景做了性能适配,用Set结构做分类判断减少遍历开销:

/**
 * 处理项目数组排序、排除前N类数据
 * @param {Array} list 原始数据源
 * @param {number} excludeTopN 需要排除的最高分类数量,示例场景传1
 * @returns {Array} 处理后的结果集
 */
function processProjectList(list, excludeTopN = 0) {
  // 提取去重的project_name值,按降序排序
  const sortedCategories = [...new Set(list.map(item => item.project_name))]
    .sort((a, b) => b.localeCompare(a)) 
  // 字符串排序用localeCompare,如果project_name是数值类型,把排序逻辑替换为 b - a 即可
  
  // 生成待排除分类的集合,判断时间复杂度O(1)
  const excludeSet = new Set(sortedCategories.slice(0, excludeTopN))
  
  // 过滤待排除分类,剩余数据按project_name降序返回
  return list
    .filter(item => !excludeSet.has(item.project_name))
    .sort((a, b) => b.project_name.localeCompare(a.project_name))
}

// 示例调用:排除排名最高的1类数据
const result = processProjectList(sourceList, 1)

输出结果

调用后返回结果和预期完全一致:

[
  {
    "project_name": "B",
    "key1": "value1"
  },
  {
    "project_name": "B",
    "key1": "value1"
  },
  {
    "project_name": "B",
    "key1": "value1"
  },
  {
    "project_name": "A",
    "key1": "value1"
  },
  {
    "project_name": "A",
    "key1": "value1"
  }
]

内容的提问来源于stack exchange,提问作者Taha Yıldırım

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:15:44