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

Ber*_*den 4 javascript arrays sorting object

我有这个数组:

sampleArray = [
  {name: 'product-2'},
  {name: 'product-15'},
  {name: 'product-3'},
  {name: 'product-10'}
]
Run Code Online (Sandbox Code Playgroud)

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

sort结合使用localeCompare

sampleArray.sort((a, b) => a.name.localeCompare(b.name))
Run Code Online (Sandbox Code Playgroud)

但是,作为name一个包含数字的字符串,我得到了这个:

sampleArray = [
  {name: 'product-10'},
  {name: 'product-15'},
  {name: 'product-2'},
  {name: 'product-3'}
]
Run Code Online (Sandbox Code Playgroud)

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

sampleArray = [
  {name: 'product-2'},
  {name: 'product-3'},
  {name: 'product-10'},
  {name: 'product-15'}
]
Run Code Online (Sandbox Code Playgroud)

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

sampleArray.sort((a,b) => a - b)
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。

我该如何解决这个问题?

Nin*_*olz 8

您已经成功了一半,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);
Run Code Online (Sandbox Code Playgroud)