按两个属性和给定顺序对对象的JavaScript数组排序
我有一个JavaScript对象数组:按两个属性和给定顺序对对象的JavaScript数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个JavaScript对象数组: data = [ {'deviation': 57.41, 'provider': "This", 'measure': "median"}, {'deviation': 49.02, 'provider': "All", 'measure': "median"}, {'deviation': 199.67, 'provider': "This", 'measure': "third_quartile"}, {'deviat
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"}
]
我想按照“提供者”(三个“全部”之前的三个“This”)和“度量”(第一个四分位数、中间位数、第三个四分位数)对其进行排序,因此生成的数组将如下所示:
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”排序的数组,但是当我将它作为参数与measure
一起输入到同一个函数中时(谢天谢地,第一个四分位数、中位数、第三个四分位数已经按照我想要的方式按字母顺序排序了),排序就被破坏了。我该怎么做呢
编辑
我一直在使用的功能:
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;
}
var compare\u prv=函数(a,b){
if(a.provider
听起来你在做:
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);
});
您可以将排序条件与链接 对于一组具有定义顺序的字符串,可以使用对象来获取所需的顺序
{
first_quartile: 1,
median: 2,
third_quartile: 3
}
这使您可以对某些项目进行排序,如果不在顺序列表中,则ssort以默认零开始,或以一个巨大的值(如Infinity
)作为底部
在本例中,模式如下所示
(order[a.measure] || 0) - (order[a.measure] || 0) // to top
(order[a.measure] || Infinify ) - (order[a.measure] || Infinity) // to bottom
var数组=[{偏差:57.41,提供者:“这个”,度量值:“中间值”},{偏差:49.02,提供者:“全部”,度量值:“中间值”},{偏差:199.67,提供者:“这个”,度量值:“第三个四分位数”},{偏差:152.31,提供者:“全部”,度量值:“第三个四分位数”},{偏差:41.48,提供者:“这个”,度量值:“第一个四分位数”},{偏差:-1.07,提供者:“全部”,度量值:“第一个四分位数”},
顺序={第一个四分位数:1,中位数:2,第三个四分位数:3};
array.sort(函数(a,b){
返回b.provider.localeCompare(a.provider)| | order[a.measure]-order[b.measure];
});
console.log(数组);
。作为控制台包装{max height:100%!important;top:0;}
您可能忘记了包含您提到的难以捉摸的函数。好的,您如何调用compare_prv和compare_meas?为什么返回零?