【问题标题】: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”

标签: javascript arrays sorting object


【解决方案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]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 2023-03-26
  • 2013-11-02
  • 2017-04-27
  • 1970-01-01
  • 2016-11-25
相关资源
最近更新 更多