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

2019-10-16 09:39:31 +08:00
 ChengNaNA

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

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:'八赵日天'
}

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

5463 次点击
所在节点    Vue.js
11 条回复
Marstin
2019-10-16 09:48:00 +08:00
最简单的就是冒泡啊。
但是你这排序规则怎么定义呢,取前几位字符,汉字转阿拉伯数字,再根据阿拉伯数字排序?
Zach369
2019-10-16 09:49:49 +08:00
没有太简单的方法. 做一个 1 对应一,2 对应二,以此类推的 map.然后转换下.就可以了
zhuzhibin
2019-10-16 09:56:21 +08:00
最重要的是排序规则吧
zhw2590582
2019-10-16 10:06:50 +08:00
```js
const NewList = ['四赵日天', '二赵日天', '八赵日天'];
const arr = ['一', '二', '三', '四', '五', '六', '七', '八', '九']
const list = NewList.sort((a, b) => arr.indexOf(a[0]) - arr.indexOf(b[0]))
```
shuichengjian
2019-10-16 10:08:07 +08:00
汉字转拼音 ,再排序吧。
ceet
2019-10-16 10:12:52 +08:00
我们可以对任何对象类型的数组排序,比如,对象 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);
belin520
2019-10-16 10:14:45 +08:00
DrugsZ
2019-10-16 10:28:52 +08:00
都不如存的时候前面用阿拉伯数字标志数字,展示的时候把阿拉伯数字切掉省心
orzorzorzorz
2019-10-16 10:39:41 +08:00
ChengNaNA
2019-10-16 11:03:32 +08:00
@zhw2590582 谢谢大佬了,参考这个方法解决了[]~( ̄▽ ̄)~
FantasyPupil
2019-10-16 11:38:31 +08:00
取首字母,或者根据字符长度进行排序。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/609766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX