我试图按升序排列给定的值。
const value = [
{ val: "11-1" },
{ val: "12-1b" },
{ val: "12-1a" },
{ val: "12-700" },
{ val: "12-7" },
{ val: "12-8" },
];我使用下面的代码按升序对此进行排序:
value.sort((a,b)=>(a.val >b.val)? 1:((b.val>a.val)?-1:0));这种排序的结果是按11-1,12-1a, 12-1b, 12-7, 12-700, 12-8顺序排列的。然而,我希望订单是11-1,12-1a, 12-1b, 12-7, 12-8, 12-700。
我怎样才能做到这一点?
发布于 2022-03-27 15:33:34
您可以先检查长度,然后按以下方式进行排序:
const value = [
{ val: "12-1" },
{ val: "12-700" },
{ val: "12-7" },
{ val: "12-8" },
];
const result = value.sort(
(a, b)=> {
if (a.val.length > b.val.length) {
return 1;
}
if (a.val.length < b.val.length) {
return -1;
}
return (a.val >b.val) ? 1 : ((b.val > a.val) ? -1 : 0)
}
);
console.log(result);
发布于 2022-03-27 15:38:57
如果只对连字符后的值进行排序感兴趣,则可以使用以下代码实现:
const value = [
{val:'12-1'},
{val:'12-700'},
{val:'12-7'},
{val:'12-8'},
];
const sorted = value.sort((a,b) => {
const anum = parseInt(a.val.split('-')[1]);
const bnum = parseInt(b.val.split('-')[1]);
return anum - bnum;
});
console.log(sorted);
发布于 2022-03-27 16:46:06
在更新问题时更新答案--以下是解决方案:
const value = [{ val: '11-1' }, { val: '12-1b' }, { val: '12-1a' }, { val: '12-700' }, { val: '12-7' }, { val: '12-8' }];
const sortAlphaNum = (a, b) => a.val.localeCompare(b.val, 'en', { numeric: true });
console.log(value.sort(sortAlphaNum));https://stackoverflow.com/questions/71637694
复制相似问题