对对象的数字数组进行排序[重复]
Posted
技术标签:
【中文标题】对对象的数字数组进行排序[重复]【英文标题】:Sort Numerically Array of object [duplicate] 【发布时间】:2020-12-11 00:32:58 【问题描述】:我有一个包含对象的数组,我想按名称对它们进行排序:
myArray = [name: 'name10', name: 'name9', name: 'name1', name: 'name3']
当我应用这样的排序方法时
myArray.sort((a, b) => (a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0));
它在 1 之后给我 10
myArray = [name: 'name1', name: 'name10', name: 'name3', name: 'name9']
我可以解决这个问题吗?
【问题讨论】:
你的“1”应该是“01” 【参考方案1】:您可以选择String#localeCompare
。
const array = [ name: 'name10' , name: 'name9' , name: 'name1' , name: 'name3' ];
array.sort(( name: a , name: b ) =>
a.localeCompare(b, undefined, numeric: true, sensitivity: 'base' )
);
console.log(array);
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
这是一个很好的解决方案【参考方案2】:如果要按末尾的数字对名称进行排序:
myArray = [name: 'name10', name: 'name9', name: 'name1', name: 'name3']
myArray.sort((a,b) =>
let aNumber = a.name.match(/\d+$/), bNumber = b.name.match(/\d+$/);
if(aNumber && bNumber)
return parseInt(aNumber[0]) - parseInt(bNumber[0]);
else
return a-b;
);
console.log(myArray);
【讨论】:
Undervoter,你需要解释...... 为什么它被否决了? @MajedBadawi 尝试将其中一个字段设置为“name” only 。它会以错误响应 @yash 可以看到上面的评论。 @MajedBadawi 你不需要[0]
以上是关于对对象的数字数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章