我得到了一个数组(见下面数组中的一个对象),我需要使用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"
};
当前回答
对于一个双因素排序(姓名和姓氏):
用户。sort((a, b) => a.name. tolowercase () < b.name. tolowercase () ?-1: a.name.toLowerCase() > b.name.toLowerCase() ?1: a.lastname.toLowerCase() < b.lastname.toLowerCase() ?-1: a.lastname.toLowerCase() > b.lastname.toLowerCase() ?1: 0)
其他回答
如果我们要对名称或具有特殊字符的东西进行排序,比如ñ或áéíóú(西班牙语中的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。
就像这样:
array.sort(function(a, b){
var nameA = a.name.toLowerCase(), nameB = b.name.toLowerCase();
if (nameA < nameB) //sort string ascending
return -1;
if (nameA > nameB)
return 1;
return 0; //default return value (no sorting)
});
如果比较的字符串包含unicode字符,您可以使用String类的localeCompare函数,如下所示:
users.sort(function(a,b){
return a.firstname.localeCompare(b.firstname);
})
假设您有一个用户数组。你可以使用用户。排序并传递一个函数,该函数接受两个参数并进行比较(comparator)
它应该会返回
如果第一个参数小于第二个参数,则为负数(在结果数组中应放在第二个参数之前) 如果第一个参数更大,则为正(应放在第二个参数之后) 如果这两个元素相等,则为0。
在我们的例子中,如果两个元素是a和b,我们想比较a.firstname和b.firstname
例子:
users.sort(function(a, b){
if(a.firstname < b.firstname) { return -1; }
if(a.firstname > b.firstname) { return 1; }
return 0;
})
这段代码适用于任何类型。
请注意,在“现实生活”™中,当您比较字符串时,您经常希望忽略大小写,正确排序变音符,像ß这样奇怪的符号,等等,因此您可能需要使用localeCompare。请看其他答案。
Underscorejs提供了非常好的_。sortBy功能:
_.sortBy([{a:1},{a:3},{a:2}], "a")
或者你可以使用自定义排序函数:
_.sortBy([{a:"b"},{a:"c"},{a:"a"}], function(i) {return i.a.toLowerCase()})