[英]Sort a strings array in ascending order with a word priority
对于以下数组
[
{ name: '4K UHD', commentator: 'Ali' },
{ name: 'English 1 HD', commentator: 'Ahmed' },
{ name: 'English 3 HD', commentator: 'Ahmed' },
{ name: 'Premium 1 HD', commentator: 'Ali' },
{ name: 'Premium 2 HD', commentator: 'Ahmed' },
]
我想对其进行排序,以便name
为Premium的对象(作为最后两个对象)排在第一位,但也按升序排列。
想要的结果是这样的
[
{ name: 'Premium 1 HD', commentator: 'Ali' },
{ name: 'Premium 2 HD', commentator: 'Ahmed' },
{ name: '4K UHD', commentator: 'Ali' },
{ name: 'English 1 HD', commentator: 'Ahmed' },
{ name: 'English 3 HD', commentator: 'Ahmed' },
]
// or like this
[
{ name: 'Premium 1 HD', commentator: 'Ali' },
{ name: 'Premium 2 HD', commentator: 'Ahmed' },
{ name: 'English 1 HD', commentator: 'Ahmed' },
{ name: 'English 3 HD', commentator: 'Ahmed' },
{ name: '4K UHD', commentator: 'Ali' },
]
通过创建自定义比较 function
const cmp = (a, b) => {
const pa = a.name.startsWith("Premium");
const pb = b.name.startsWith("Premium");
return
pa !== pb
// comparing Premium vs non-Premium, Premium "wins"
? (pa ? -1 : 1)
// everything else (i.e. Prem vs Prem or non-Prem vs non-Prem)
: a.name.localeCompare(b.name);
};
dataArray.sort(cmp);
您可以确保以Premium
开头的所有字符串都移到排序的顶部,同时确保在Premium
和非Premium
“组”之间保留排序顺序。
尝试降序:
array.sort((a, b) => a.name < b.name ? 1 : -1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.