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

4

我有这个数组:

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

我希望使用属性 name 对它进行排序,按字母顺序排列,但字符串中的数字除外。
我正在使用与 localeCompare 结合的 sort
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 不,我已经看过了。它给了我与我的代码相同的输出。 - Berg_Durden
是的,我在发出问题之后意识到你的问题是不同的。对此感到抱歉! - zcoop98
1个回答

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);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接