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

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

  •  
  •   ChengNaNA · 53 天前 · 3248 次点击
    这是一个创建于 53 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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
        1
    Marstin   53 天前   ♥ 1
    最简单的就是冒泡啊。
    但是你这排序规则怎么定义呢,取前几位字符,汉字转阿拉伯数字,再根据阿拉伯数字排序?
        2
    Zach369   53 天前   ♥ 1
    没有太简单的方法. 做一个 1 对应一,2 对应二,以此类推的 map.然后转换下.就可以了
        3
    zhuzhibin   53 天前 via iPhone
    最重要的是排序规则吧
        4
    zhw2590582   53 天前   ♥ 2
    ```js
    const NewList = ['四赵日天', '二赵日天', '八赵日天'];
    const arr = ['一', '二', '三', '四', '五', '六', '七', '八', '九']
    const list = NewList.sort((a, b) => arr.indexOf(a[0]) - arr.indexOf(b[0]))
    ```
        5
    shuichengjian   53 天前
    汉字转拼音 ,再排序吧。
        6
    ceet   53 天前   ♥ 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);
        8
    DrugsZ   53 天前
    都不如存的时候前面用阿拉伯数字标志数字,展示的时候把阿拉伯数字切掉省心
        10
    ChengNaNA   53 天前
    @zhw2590582 谢谢大佬了,参考这个方法解决了[]~( ̄▽ ̄)~
        11
    FantasyPupil   53 天前
    取首字母,或者根据字符长度进行排序。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2365 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 28ms · UTC 12:55 · PVG 20:55 · LAX 04:55 · JFK 07:55
    ♥ Do have faith in what you're doing.