我希望对一个数组按照 科目 (字符串、按字母顺序),然后是 水平 (整数、升序),最后是 名称 (字符串、按字母顺序) 进行排序。我在 Stack Overflow 上找到了许多其他的线程,但没有发现按多个变量类型排序的线程。我以为我已经做到了,但它并未正确排序。
我该如何按主题、水平和姓名进行排序?
排序功能:
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",
},
];
我该如何按主题、水平和姓名进行排序?
a.subject.localeCompare(b.subject)
进行比较。排序函数需要返回正数、负数或零。目前对于字符串只返回true
或false
,表示正数和零,缺少负数的情况。 - Sebastian Simonscipads.sort((a, b) => a.subject.localeCompare(b.subject) || a.level - b.level || a.name.localeCompare(b.name));
。 - Sebastian Simon||
的说明和示例,请访问https://dev59.com/cm455IYBdhLWcg3wCPjh#27993435。 - DarkMatterMatt