除数字外,如何按字母顺序对对象数组进行排序?

Posted

技术标签:

【中文标题】除数字外,如何按字母顺序对对象数组进行排序?【英文标题】: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 不,我已经看到了。它为我提供了与我的代码相同的输出。 是的,我意识到你的问题在扣动扳机后就很明显了。很抱歉! 【参考方案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);

【讨论】:

以上是关于除数字外,如何按字母顺序对对象数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何按字母顺序对 DBML 对象进行排序?

按数字(最高优先)然后按字母(字母顺序)对对象集合进行排序

如何在 React.js 中按字母顺序对数组中的对象进行排序

按字母顺序对 NSDictionary 值进行排序

根据字符串属性按字母顺序对对象数组进行排序

Javascript按字母顺序排序并将所有双精度数移动到数组的末尾