我有这个数组:
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)但事实并非如此。
我该如何解决这个问题呢?
发布于 2020-09-17 05:04:34
你走了一半,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);
https://stackoverflow.com/questions/63927851
复制相似问题