我想按主题 (字符串,字母顺序) 对数组进行排序,然后是级别 (整数,升序) ,然后是名称 (字符串,字母顺序)。我在 SO 上发现了许多其他线程,但我还没有找到任何按多个变量类型排序的线程。我以为我有它,但它没有正确排序。
排序函数:
scipads.sort(function (a, b) {
if (a.subject != b.subject)
return a.subject < b.subject;
if (a.level != b.level)
return a.level - b.level;
return a.name < b.name;
});
数组:
var scipads = [{
"name": "L2 Physics Externals",
"level": 2,
"subject": "physics",
}, {
"name": "L2 Physics Internals",
"level": 2,
"subject": "physics",
}, {
"name": "L2 Chem Externals",
"level": 2,
"subject": "chemistry",
}, {
"name": "L2 Chem Internals",
"level": 2,
"subject": "chemistry",
}, {
"name": "L2 Bio Internals",
"level": 2,
"subject": "biology",
}, {
"name": "L2 Bio Externals",
"level": 2,
"subject": "biology",
}, {
"name": "L1 Electricity & Magnetism",
"level": 1,
"subject": "physics",
}, {
"name": "L1 Wave Behaviour",
"level": 1,
"subject": "physics",
}, {
"name": "L1 Heat",
"level": 1,
"subject": "physics",
}, {
"name": "L1 Carbon Chemistry",
"level": 1,
"subject": "chemistry",
}, {
"name": "L1 Selected Elements",
"level": 1,
"subject": "chemistry",
}, {
"name": "L1 Chemical Reactions",
"level": 1,
"subject": "chemistry",
},
];
如何按主题、级别、姓名排序?
最佳答案
使用localeCompare
比较字符串
var scipads=[{name:"L2 Physics Externals",level:2,subject:"physics"},{name:"L2 Physics Internals",level:2,subject:"physics"},{name:"L2 Chem Externals",level:2,subject:"chemistry"},{name:"L2 Chem Internals",level:2,subject:"chemistry"},{name:"L2 Bio Internals",level:2,subject:"biology"},{name:"L2 Bio Externals",level:2,subject:"biology"},{name:"L1 Electricity & Magnetism",level:1,subject:"physics"},{name:"L1 Wave Behaviour",level:1,subject:"physics"},{name:"L1 Heat",level:1,subject:"physics"},{name:"L1 Carbon Chemistry",level:1,subject:"chemistry"},{name:"L1 Selected Elements",level:1,subject:"chemistry"},{name:"L1 Chemical Reactions",level:1,subject:"chemistry"}];
scipads.sort(function(a, b) {
if (a.subject != b.subject)
return a.subject.localeCompare(b.subject);
else if (a.level != b.level)
return a.level - b.level;
return a.name.localeCompare(b.name);
});
console.log(scipads);
关于具有多个值(字符串和数字)的 JavaScript array.sort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350911/