首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按升序发布排序值

按升序发布排序值
EN

Stack Overflow用户
提问于 2022-03-27 15:29:44
回答 5查看 73关注 0票数 0

我试图按升序排列给定的值。

代码语言:javascript
复制
const value = [
  { val: "11-1" },
  { val: "12-1b" },
  { val: "12-1a" },
  { val: "12-700" },
  { val: "12-7" },
  { val: "12-8" },
];

我使用下面的代码按升序对此进行排序:

代码语言:javascript
复制
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

我怎样才能做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-03-27 15:33:34

您可以先检查长度,然后按以下方式进行排序:

代码语言:javascript
复制
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);

票数 0
EN

Stack Overflow用户

发布于 2022-03-27 15:38:57

如果只对连字符后的值进行排序感兴趣,则可以使用以下代码实现:

代码语言:javascript
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2022-03-27 16:46:06

在更新问题时更新答案--以下是解决方案:

代码语言:javascript
复制
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));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71637694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档