JavaScript如何将数组中符合属性条件的对象排列至最前端
实现方案
我们可以通过Array.prototype.sort()自定义比较函数实现需求,核心思路是给不同规则的元素设置优先级数值,数值越小排序越靠前:
- 优先级0:
breed属性值为Shiba的对象,排在最前 - 优先级1:带有
breed属性但值不为Shiba的对象,排在中间 - 优先级2:不包含
breed属性的对象,排在最后
基础实现代码
// 示例输入 let dogs = [ {id: 0, breed: 'Pug'}, {id: 1, breed: 'Shiba'}, {id: 2}, {id: 3, breed: 'Shar Pei'}, ] const sortedDogs = dogs.sort((a, b) => { const getPriority = (item) => { if (item.breed === 'Shiba') return 0 if ('breed' in item) return 1 return 2 } return getPriority(a) - getPriority(b) })
扩展补充
如果需要同一优先级内按breed的字典序排序,可以补充同优先级的比较逻辑:
const sortedDogs = dogs.sort((a, b) => { const getPriority = (item) => { if (item.breed === 'Shiba') return 0 if ('breed' in item) return 1 return 2 } const priorityA = getPriority(a) const priorityB = getPriority(b) // 优先级不同时直接比较优先级 if (priorityA !== priorityB) return priorityA - priorityB // 同是带breed的中间优先级对象,按breed字母顺序排序 if (priorityA === 1) return a.breed.localeCompare(b.breed) // 其余情况保持原相对顺序 return 0 })
内容的提问来源于stack exchange,提问作者nandesuka
相关产品推荐
相关产品推荐

