使用 underscorejs 进行多维排序

Multidimensional sorting with underscorejs

我的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。

提前致谢。

按照说明使用下划线:你可以排序两次: _(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>

普通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; }