使用underscorejs进行多维排序

时间:2018-03-05 15:45:43

标签: javascript json underscore.js

我的json结构如下;

var MyJson = 

[   
    {
        "Country": "Austria",
        "SubCategory": "55",
    }, {
        "Country": "Brazil",
        "SubCategory": "0",
    }, {
        "Country": "Canada",
        "SubCategory": "25",
    }, {
        "Country": "Cyprus",
        "SubCategory": "55",
    },  {
        "Country": "Denmark",
        "SubCategory": "0",
    }, {
        "Country": "France",
        "SubCategory": "25",
    }, {
        "Country": "Greece",
        "SubCategory": "55",
    }, {
        "Country": "Hungary",
        "SubCategory": "0",
    }
];

我正在按如下方式对其进行排序;

_.sortBy(MyJson, 'SubCategory').reverse()

结果如下;

Greece  : 55
Cyprus  : 55
Austria : 55
France  : 25
Canada  : 25
Hungary : 0
Denmark : 0
Brazil  : 0

我的预期结果如下;

Austria : 55
Cyprus  : 55
Greece  : 55
Canada  : 25
France  : 25
Brazil  : 0
Denmark : 0
Hungary : 0

我试过如下;

_.sortBy(_.sortBy(MyJson, 'SubCategory').reverse(),'Country');

有没有办法用下划线将json排序为desc, asc?由于限制了我的开发环境,我没有使用Lodash。

提前谢谢。

2 个答案:

答案 0 :(得分:4)

简单的Javascript方法。



var data = [{ Country: "Austria", SubCategory: "55" }, { Country: "Brazil", SubCategory: "0" }, { Country: "Canada", SubCategory: "25" }, { Country: "Cyprus", SubCategory: "55" }, { Country: "Denmark", SubCategory: "0" }, { Country: "France", SubCategory: "25" }, { Country: "Greece", SubCategory: "55" }, { Country: "Hungary", SubCategory: "0" }];

data.sort(function (a, b) {
    return b.SubCategory - a.SubCategory || a.Country.localeCompare(b.Country);
});

console.log(data);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:1)

如上所述使用下划线:您可以排序两次: _(MyJson).chain().sortBy('Country').reverse().sortBy('SubCategory').reverse().value();

This answers正是您要找的。

以下是来自下划线文档的一件事 - sortBy是一种稳定的算法。 这意味着你可以先按你的第二个属性排序,然后按正确的顺序排序,然后按第一个属性排序 - 这将使得两个字段具有相同的排序属性值,其顺序与找到的相同。 (您已经使用第一种排序设置的顺序)

var MyJson = 

[   
    {
        "Country": "Austria",
        "SubCategory": "55",
    }, {
        "Country": "Brazil",
        "SubCategory": "0",
    }, {
        "Country": "Canada",
        "SubCategory": "25",
    }, {
        "Country": "Cyprus",
        "SubCategory": "55",
    },  {
        "Country": "Denmark",
        "SubCategory": "0",
    }, {
        "Country": "France",
        "SubCategory": "25",
    }, {
        "Country": "Greece",
        "SubCategory": "55",
    }, {
        "Country": "Hungary",
        "SubCategory": "0",
    }
];
var sortedArray =  _(MyJson).chain().sortBy('Country').reverse().sortBy('SubCategory').reverse().value();

console.log(sortedArray)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>