按指定优先级排序对象数组:Premium类元素优先升序排列
解决方案
可以通过筛选+排序+拼接的方式实现需求:
- 先从原数组里筛选出所有
name以Premium开头的元素,对这部分元素按name升序排列 - 再筛选出剩下的非Premium元素(保留原数组中的相对顺序)
- 把排序后的Premium数组和非Premium数组拼接起来
代码实现
const originalArray = [ { 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' }, ]; // 筛选并排序Premium元素 const premiumItems = originalArray .filter(item => item.name.startsWith('Premium')) .sort((a, b) => a.name.localeCompare(b.name)); // 筛选非Premium元素(保留原顺序) const nonPremiumItems = originalArray.filter(item => !item.name.startsWith('Premium')); // 拼接得到结果 const result = [...premiumItems, ...nonPremiumItems]; console.log(result);
补充说明
- 若需要匹配
name中包含Premium的元素(而非仅开头),可把startsWith替换为includes localeCompare方法用于字符串自然排序,能确保Premium 1 HD排在Premium 2 HD之前- 非Premium元素会保留原数组的相对顺序,与你给出的两种预期结果均兼容
内容的提问来源于stack exchange,提问作者Muhammad Mahmoud
相关产品推荐
相关产品推荐

