You need to enable JavaScript to run this app. 如何按count属性对嵌套复杂JSON对象进行降序排序
优惠活动
大模型
产品
解决方案
定价
更多

如何按count属性对嵌套复杂JSON对象进行降序排序

按count属性对JSON子对象整体降序排序的实现方案

前置结构修正

你提供的原始JSON存在语法结构错误,直接解析会触发异常,先修正为可正常运行的合法结构:

{
  "Resource": [
    {
      "details": [{"value": "3.70"}, {"value": "3.09"}],
      "work": {"count": 1}
    },
    {
      "details": [{"value": "4"}, {"value": "5"}],
      "work": {"count": 2}
    },
    {
      "details": [{"value": "5"}, {"value": "5"}],
      "work": "null"
    }
  ]
}

修正说明:

  • 补全原结构中第二对象的缺失闭合括号,拆分了原粘连错位的第三数组元素,让数组结构合法
  • 保留原结构中work为字符串"null"的特殊值,在排序逻辑中做兼容处理

排序核心规则

  • 排序范围为JSON中Resource字段对应的数组,数组内每个完整子对象作为整体参与排序,不对对象内部字段拆分排序
  • 排序方向为降序:有效count值越高的对象越靠前
  • 兼容规则:
    • 不存在work字段、work为非对象类型、count值无法转为有效数字的对象,统一按照最低权重处理,排在所有带有效count值的对象之后
    • 比较前需将count值转为数字类型,避免字符串、空值导致的隐式类型转换错误
    • 必须先判断work的类型,否则遇到非对象类型的work值(如本例中的字符串"null"),直接访问count属性会直接抛出运行时错误

可直接运行的JavaScript实现

// 待处理的原始JSON数据
const rawData = {
  "Resource": [
    {
      "details": [{"value": "3.70"}, {"value": "3.09"}],
      "work": {"count": 1}
    },
    {
      "details": [{"value": "4"}, {"value": "5"}],
      "work": {"count": 2}
    },
    {
      "details": [{"value": "5"}, {"value": "5"}],
      "work": "null"
    }
  ]
};

// 提取单个元素的排序权重
const getItemWeight = (item) => {
  // 非对象类型的work直接返回最低权重
  if (typeof item.work !== 'object' || item.work === null) return -1;
  const countNum = Number(item.work.count);
  // count值无法转成有效数字的同样返回最低权重
  return isNaN(countNum) ? -1 : countNum;
};

// 执行降序排序
rawData.Resource.sort((prev, next) => {
  return getItemWeight(next) - getItemWeight(prev);
});

// 输出排序结果
console.log(JSON.stringify(rawData, null, 2));

排序执行后的最终顺序

  1. count=2的对象(权重最高,排首位)
  2. count=1的对象(排第二位)
  3. work="null"的对象(无有效count值,权重最低,排末尾)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 01:45:07