按两个属性并按给定顺序对对象的JavaScript数组进行排序 [英] Sort JavaScript array of Objects by two properties and given order
问题描述
我有这个对象的JavaScript数组:
I have this JavaScript array of Objects:
data = [
{'deviation': 57.41, 'provider': "This", 'measure': "median"},
{'deviation': 49.02, 'provider': "All", 'measure': "median"},
{'deviation': 199.67, 'provider': "This", 'measure': "third_quartile"},
{'deviation': 152.31, 'provider': "All", 'measure': "third_quartile"},
{'deviation': 41.48, 'provider': "This", 'measure': "first_quartile"},
{'deviation': -1.07, 'provider': "All", 'measure': "first_quartile"}
]
,我想按"provider"(三个"All"之前的三个"This")和"measure"(第一个四分位数,中位数,第三个四分位数)对它进行排序,因此结果数组看起来像:
and I would like to sort it both by 'provider' (the three "This" before the three "All") and by 'measure' (first quartile, median, third quartile), so the resulting array will look like:
data = [
{'deviation': 41.48, 'provider': "This", 'measure': "first_quartile"},
{'deviation': 57.41, 'provider': "This", 'measure': "median"},
{'deviation': 199.67, 'provider': "This", 'measure': "third_quartile"},
{'deviation': -1.07, 'provider': "All", 'measure': "first_quartile"}
{'deviation': 49.02, 'provider': "All", 'measure': "median"},
{'deviation': 152.31, 'provider': "All", 'measure': "third_quartile"},
]
我已经编写了一个函数作为 .sort()
的参数,它确实返回了按'provider'排序的数组,但是当我使用测量
作为参数(幸运的是,first_quartile,中位数,third_quartile已经按照我想要的方式按字母顺序排序)-排序被打乱了.我该怎么做呢?
I have written a function as an argument to .sort()
, and it does return the array sorted by 'provider', but then when I feed it into the same function with measure
as an argument (thankfully, first_quartile, median, third_quartile are already alphabetically sorted the way I want them) - the sorting gets broken. How can I go about doing it?
编辑我一直在使用的功能:
EDIT The functions I have been using:
var compare_prv = function(a,b) {
if (a.provider < b.provider){
return 1;
}
return 0;
}
var compare_meas = function(a,b) {
if (a.measure < b.measure){
return -1;
}
return 0;
}
推荐答案
听起来像您在做
data.sort(function(a, b) {
//sort by provider
});
data.sort(function(a, b) {
//sort by measure
});
但是您要做的是:
data.sort(function(a, b) {
//sort by provider, but if they are equal, sort by measure
});
类似
data.sort(function(a, b) {
if (a.provider === b.provider) {
return a.measure.localeCompare(b.measure);
}
return b.provider.localeCompare(a.provider);
});
这篇关于按两个属性并按给定顺序对对象的JavaScript数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!