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

我有这个数组:


sampleArray = [

  {name: 'product-2'},

  {name: 'product-15'},

  {name: 'product-3'},

  {name: 'product-10'}

]

我想使用 property 对其进行排序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)

但事实并非如此。


我该如何解决这个问题?


沧海一幻觉
浏览 92回答 1
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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript