JavaScript如何对嵌套结构中104数组前两索引求和并完成排序
原有代码的核心问题
- 层级取数错误:所有组织数据嵌套在顶层
data字段下,原代码直接对整个原始JSON对象取键,仅能获取到"data"单个键,无法读取到"Org 1/2/3"这类具体组织名。 - 遍历类型错误:
Object.keys返回的是字符串格式的组织名称,原代码直接将字符串当做组织对象读取"104"字段,无法获取对应数值。 - 逻辑偏离需求:没有实现“计算104字段前两位元素和、按和值排序”的核心流程,整体目标和需求不匹配。
正确实现逻辑
流程说明
- 定位到组织数据所在的层级,将原键值对格式的组织列表转为带排序权重的可遍历数组
- 逐个组织计算排序权重:提取组织下"104"数组的第0、第1位元素,求和作为排序依据
- 按权重值对组织数组排序,可按需切换升序/降序规则
- 将排序后的数组重新组装为和原结构格式一致的对象,完成输出
可运行代码示例
// 替换为你的完整原始JSON数据 const rawData = { "data": { "Org 1": { /* 原数据内容 */ }, "Org 2": { /* 原数据内容 */ }, "Org 3": { /* 原数据内容 */ } } }; // 提取组织集合 const orgEntries = Object.entries(rawData.data); // 为每个组织绑定排序权重(104字段前两位元素的和) const orgWithWeight = orgEntries.map(([orgName, orgContent]) => { const sortWeight = orgContent["104"][0] + orgContent["104"][1]; return { orgName, orgContent, sortWeight }; }); // 按权重降序排序:升序则将sortWeight的比较项反向即可 orgWithWeight.sort((a, b) => b.sortWeight - a.sortWeight); // 重新组装为和原格式一致的结果 const sortedResult = { data: orgWithWeight.reduce((result, item) => { result[item.orgName] = item.orgContent; return result; }, {}) };
结果校验
针对你提供的原始测试数据,计算各组织的排序权重:
- Org 3:
0.44 + 0.24 = 0.68 - Org 1:
0.309 + 0.3483 = 0.6573 - Org 2:
0.2059 + 0.3824 = 0.5883
降序排序后的组织顺序为Org 3 → Org 1 → Org 2,和代码实际输出结果一致。
内容的提问来源于stack exchange,提问作者Shaun
相关产品推荐
相关产品推荐

