V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ChengNaNA
V2EX  ›  Vue.js

小白前端,不懂就问,如何自定义数组内汉字的排序

  •  
  •   ChengNaNA · 2019-10-16 09:39:31 +08:00 · 5453 次点击
    这是一个创建于 1858 天前的主题,其中的信息可能已经有所发展或是发生改变。

    接口获取一个数组,类似这样

    List:[
        {
            0:{number:1,name:'四赵日天'}
            1:{number:2,name:'二赵日天'}
            2:{number:3,name:'八赵日天'}
        }
    ]
    

    然后通过这样的方法把 name 提取到 NewList 数组里面

    let NewList= [];
    for (let item of this.List){
     NewList.push(item.name)
    }
    

    提取后的 NewList 中的 name 排序是这样的:

    NewList:{
        0:'四赵日天',
        1:'二赵日天',
        2:'八赵日天'
    }
    

    求问 vue 中要怎么做处理才能让它自定义排序,像这样排序?

    NewList:{
        0:'二赵日天',
        1:'四赵日天',
        2:'八赵日天'
    }
    

    求大佬们解答,先谢谢大佬们了!

    11 条回复    2019-10-16 11:38:31 +08:00
    Marstin
        1
    Marstin  
       2019-10-16 09:48:00 +08:00   ❤️ 1
    最简单的就是冒泡啊。
    但是你这排序规则怎么定义呢,取前几位字符,汉字转阿拉伯数字,再根据阿拉伯数字排序?
    Zach369
        2
    Zach369  
       2019-10-16 09:49:49 +08:00   ❤️ 1
    没有太简单的方法. 做一个 1 对应一,2 对应二,以此类推的 map.然后转换下.就可以了
    zhuzhibin
        3
    zhuzhibin  
       2019-10-16 09:56:21 +08:00 via iPhone
    最重要的是排序规则吧
    zhw2590582
        4
    zhw2590582  
       2019-10-16 10:06:50 +08:00   ❤️ 2
    ```js
    const NewList = ['四赵日天', '二赵日天', '八赵日天'];
    const arr = ['一', '二', '三', '四', '五', '六', '七', '八', '九']
    const list = NewList.sort((a, b) => arr.indexOf(a[0]) - arr.indexOf(b[0]))
    ```
    shuichengjian
        5
    shuichengjian  
       2019-10-16 10:08:07 +08:00
    汉字转拼音 ,再排序吧。
    ceet
        6
    ceet  
       2019-10-16 10:12:52 +08:00   ❤️ 1
    我们可以对任何对象类型的数组排序,比如,对象 Person 有名字和年龄属性,我们希望根据年龄排序,那么我们可以这么写:

    const friends=[
    {name:'john',age:30},
    {name:"lily",age:20},
    {name:"merry",age:24},
    ];
    function comparePerson(property){
    return function(a,b){
    if(a[property] < b[property]){
    return -1;
    }
    if(a[property] > b[property]){
    return 1;
    }
    return 0;
    }
    }
    console.log(friends.sort(comparePerson('age')));


    这是最简单的根据年龄 age 排序,如果要排序的字段里面包含汉字或者英文字母要怎么排呢,我们可以这么写:

    let data = [
    {chinese: '蔡司', english: 'Chase'},
    {chinese: '艾伦', english: 'Allen'},
    {chinese: '左拉', english: 'Zola'},
    {chinese: '贝克', english: 'Baker'},
    {chinese: '伯格', english: 'Berg'},
    {chinese: '菲奇', english: 'Fitch'},
    {chinese: '迪安', english: 'Dean'},
    {chinese: '厄尔', english: 'Earle'},
    {chinese: '亨利', english: 'Henry'},
    ];

    //根据汉字首字母排序
    //使用箭头函数
    // [注] localeCompare() 是 js 内置方法
    // data.sort((a, b)=> b.chinese.localeCompare(a.chinese, 'zh')); //z~a 排序
    // data.sort((a, b)=> a.chinese.localeCompare(b.chinese, 'zh')); //a~z 排序
    // console.log(data);

    //根据英文排序 比较 首字母 ASCLL 码
    // console.log(data[0].english.charCodeAt(0));
    // data.sort((a, b) => b.english.charCodeAt(0) - a.english.charCodeAt(0)); //z~a 排序
    data.sort((a, b) => a.english.charCodeAt(0) - b.english.charCodeAt(0)); //a~z 排序

    console.log(data);
    DrugsZ
        8
    DrugsZ  
       2019-10-16 10:28:52 +08:00
    都不如存的时候前面用阿拉伯数字标志数字,展示的时候把阿拉伯数字切掉省心
    ChengNaNA
        10
    ChengNaNA  
    OP
       2019-10-16 11:03:32 +08:00
    @zhw2590582 谢谢大佬了,参考这个方法解决了[]~( ̄▽ ̄)~
    FantasyPupil
        11
    FantasyPupil  
       2019-10-16 11:38:31 +08:00
    取首字母,或者根据字符长度进行排序。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2677 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:49 · PVG 19:49 · LAX 03:49 · JFK 06:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.