我得到了一个数组(见下面数组中的一个对象),我需要使用JavaScript按名字排序。 我该怎么做呢?
var user = {
bio: null,
email: "user@domain.example",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
我得到了一个数组(见下面数组中的一个对象),我需要使用JavaScript按名字排序。 我该怎么做呢?
var user = {
bio: null,
email: "user@domain.example",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
当前回答
只是为了记录,如果你想有一个命名排序函数,语法如下:
let sortFunction = (a, b) => {
if(a.firstname < b.firstname) { return -1; }
if(a.firstname > b.firstname) { return 1; }
return 0;
})
users.sort(sortFunction)
请注意,以下是无效的:
users.sort(sortFunction(a,b))
其他回答
如果比较的字符串包含unicode字符,您可以使用String类的localeCompare函数,如下所示:
users.sort(function(a,b){
return a.firstname.localeCompare(b.firstname);
})
更紧凑的表示法:
user.sort(function(a, b){
return a.firstname === b.firstname ? 0 : a.firstname < b.firstname ? -1 : 1;
})
如果我们要对名称或具有特殊字符的东西进行排序,比如ñ或áéíóú(西班牙语中的commons),我们可以使用params locales(在这种情况下,es代表西班牙语)和如下选项:
让用户=[{“firstname”:“Az”},{“firstname”:“Ab”},{“firstname”:“唉”},{“firstname”:“Na”},{“firstname”:“新西兰”},{“firstname”:“纽约”}); 用户。sort((a, b) => a.firstname. localecompare (b。名字,'es',{灵敏度:'base'})) console.log(用户)
官方的语言环境选项可以在这里找到iana, es(西班牙语),de(德语),fr(法语)。关于灵敏度基数的意思是:
只有基本字母不同的字符串比较为不相等。例如:a≠b, a = á, a = a。
受到这个答案的启发,
users.sort((a,b) => (a.firstname - b.firstname));
同样,对于asec和desc排序,你可以使用这个: 假设我们有一个变量SortType,指定你想要的升序排序或降序排序:
users.sort(function(a,b){
return sortType==="asc"? a.firstName.localeCompare( b.firstName): -( a.firstName.localeCompare( b.firstName));
})