【问题标题】:How to sort array of objects alphabetically except for numbers?除数字外,如何按字母顺序对对象数组进行排序?
【发布时间】:2021-01-03 17:54:08
【问题描述】:

我有这个数组:

sampleArray = [
  {name: 'product-2'},
  {name: 'product-15'},
  {name: 'product-3'},
  {name: 'product-10'}
]

我想使用属性name 对其进行排序,字符串中的数字除外。

我正在使用sort 结合localeCompare

sampleArray.sort((a, b) => a.name.localeCompare(b.name))

但是,由于name 是一个包含数字的字符串,所以我得到了这个:

sampleArray = [
  {name: 'product-10'},
  {name: 'product-15'},
  {name: 'product-2'},
  {name: 'product-3'}
]

考虑到数字,我还需要以正确的顺序获取它。这是什么:

sampleArray = [
  {name: 'product-2'},
  {name: 'product-3'},
  {name: 'product-10'},
  {name: 'product-15'}
]

我知道如果我只处理数字,我可以这样做:

sampleArray.sort((a,b) => a - b)

但事实并非如此。

我该如何解决这个问题?

【问题讨论】:

  • @zcoop98 不,我已经看到了。它为我提供了与我的代码相同的输出。
  • 是的,我意识到你的问题在扣动扳机后就很明显了。很抱歉!

标签: javascript arrays sorting object


【解决方案1】:

您已经完成了一半,String#localeCompare 接受一个选项,您可以使用字符串进行自然排序。

const
    array = [{ name: 'product-2' }, { name: 'product-15' }, { name: 'product-3' }, { name: 'product-10' }];

array.sort((a, b) => a.name.localeCompare(
    b.name,
    undefined,
    { numeric: true, sensitivity: 'base' }
));

console.log(array);

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 1970-01-01
    • 2014-12-30
    • 2015-05-17
    • 1970-01-01
    • 2013-11-02
    • 2017-02-19
    • 1970-01-01
    相关资源
    最近更新 更多