对对象的数字数组进行排序[重复]

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]

以上是关于对对象的数字数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按字母数字对javascript数组进行排序[重复]

如何在javascript中对字母数字数组进行排序[重复]

按字符串内的数字对数组进行排序[重复]

JQuery使用日期对对象数组进行排序[重复]

在Javascript中对地址数组进行排序[重复]

基于对象属性对数组进行排序 - Javascript [重复]