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

如何按品牌分组后以组内最高值为基准实现数组升序/降序排序

实现方案

核心逻辑

  • 第一步:对原数组按brand字段分组,同步计算每个分组下number的最大值(需将字符串格式的number转为整数做数值比较)
  • 第二步:根据排序方向(升/降序),用分组的最大值对所有分组做整体排序
  • 第三步:每个分组内部按number值做对应方向的排序,最后把所有分组的元素拼接成最终结果

完整代码

// 排序工具函数,参数1为原数组,参数2为排序方向:'asc'升序/'desc'降序
function sortByRule(arr, order = 'asc') {
  // 1. 分组+计算分组最大值
  const groupMap = {}
  arr.forEach(item => {
    const num = parseInt(item.number)
    if (!groupMap[item.brand]) {
      groupMap[item.brand] = {
        maxNum: num,
        list: [item]
      }
      return
    }
    groupMap[item.brand].list.push(item)
    if (num > groupMap[item.brand].maxNum) {
      groupMap[item.brand].maxNum = num
    }
  })

  // 2. 分组整体排序
  const groupList = Object.values(groupMap)
  groupList.sort((a, b) => {
    return order === 'asc' ? a.maxNum - b.maxNum : b.maxNum - a.maxNum
  })

  // 3. 分组内部排序+拍平
  return groupList.flatMap(group => {
    return group.list.sort((a, b) => {
      const numA = parseInt(a.number)
      const numB = parseInt(b.number)
      return order === 'asc' ? numA - numB : numB - numA
    })
  })
}

// 测试用例
const original_array = [
  { brand: "Ford",   number: "1", },
  { brand: "BMW",    number: "1", },
  { brand: "BMW",    number: "5", },
  { brand: "BMW",    number: "20",},
  { brand: "Toyota", number: "10",}
];

const asc_order = sortByRule(original_array, 'asc')
const desc_order = sortByRule(original_array, 'desc')

console.log('升序结果:', asc_order)
console.log('降序结果:', desc_order)

结果验证

运行上述代码后,输出的升序、降序结果和你给出的预期结果完全匹配。

内容的提问来源于stack exchange,提问作者braveducky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:02