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

JavaScript:对象数组-按属性值排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个对象数组。我不知道在代码运行之前会有多少个对象(它是从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

我有一个对象数组。我不知道在代码运行之前会有多少个对象(它是从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个键,并将其余的值存储到“其他”键中,但这与问题无关,仅在此提供信息。

如果您即将获得完整数组的排序结果(如您在术语中所述),那么这可能就是答案

您可以首先使用一个简单的
数组.prototype.reduce
计算
arr
ay中每个对象的相应属性之和,然后将结果转换为所需的结构(我更喜欢循环对象键),然后对结构化数组进行排序

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(空);
Object.keys(p.forEach)(k=>result[k]=p[k]+c[k]);
返回结果;
});
var sorted=Object.keys(sum.map)(k=>k,sum[k]])。sort((a,b)=>a[1]-b[1]);

控制台日志(已排序)
每个对象是否总是有3个键值?那么您想对每个对象的总和进行排序吗?@LinusAronsson否,它可能或多或少。@Daniel_L是的,还有键值。排序函数是否在循环中调用?根据你的缩进,看起来是这样的。如果是这样,就把它搬出去。而且,你的标点符号没有对齐,所以很难说