繁体   English   中英

使用单词优先级按升序对字符串数组进行排序

[英]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' },
]

我想对其进行排序,以便namePremium的对象(作为最后两个对象)排在第一位,但也按升序排列。

想要的结果是这样的

[
  { 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM