繁体   English   中英

JavaScript:对象数组-按属性值排序

[英]JavaScript: Array of Objects - Sorting by Attribute Value

我有一个对象数组。 在代码运行之前(从API返回),我不知道会有多少个对象,但是让我们假设这是数组:

var arr = [ { A: 40, B: 88, C: 11 },
            { A: 10, B: 98, C: 65 },  // sum of A = 188
            { A: 11, B: 15, C: 18 },  // sum of B = 310
            { A: 16, B: 55, C: 16 },  // sum of C = 136
            { A: 22, B: 23, C: 13 },
            { A: 89, B: 31, C: 13 } ]

我想查看数组中的每个对象。 我希望最终结果是键和值的列表,并按降序排列。 因此,如果我们使用上面的数组,代码将返回如下内容:

[["B", 310], ["A", 188], ["C", 136]]

我希望不要问太多是否可以在代码中添加注释,因为有时这里的答案可能非常简短高效(并且表现出色),但是对于算法初学者来说很难理解:)

提前谢谢了。

编辑:每个对象不一定总是具有三个键,它大约是30-40个键。

位更多信息:我正在为堆积的条形图编写此代码,然后只提取前10个键并将其余值存储到“其他”键中,但这与问题无关,仅在此处信息。

如果您要获得完整数组的排序结果(如您在术语中提到的那样),则可能是答案。

你可以在对应的每一个对象的属性首先计算总和arr用一个简单的AY Array.prototype.reduce然后将结果转换到你想要的结构(我更愿意遍历对象键),然后你的排序结构阵列。

 var arr = [ { A: 40, B: 88, C: 11 }, { A: 10, B: 98, C: 65 }, { A: 11, B: 15, C: 18 }, { A: 16, B: 55, C: 16 }, { A: 22, B: 23, C: 13 }, { A: 89, B: 31, C: 13 } ]; var sum = arr.reduce((p, c) => { var result = Object.create(null); Object.keys(p).forEach(k => result[k] = p[k] + c[k]); return result; }); var sorted = Object.keys(sum).map(k => [k, sum[k]]).sort((a, b) => a[1] - b[1]); console.log(sorted); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM