按两个属性和给定顺序对对象的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

我有一个JavaScript对象数组:

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?为什么返回零?