我得到了一个数组(见下面数组中的一个对象),我需要使用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"
};
当前回答
如果我们要对名称或具有特殊字符的东西进行排序,比如ñ或áéíóú(西班牙语中的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(function(a, b){
//compare two values
if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
return 0;
})
受到这个答案的启发,
users.sort((a,b) => (a.firstname - b.firstname));
就像这样:
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)
});
一个广义函数可以这样写
function getSortedData(data, prop, isAsc) {
return data.sort((a, b) => (a[prop] < b[prop] ? -1 : 1) * (isAsc ? 1 : -1));
}
您可以传递以下参数
要排序的数据 数据中的属性应该按它排序 最后一个参数为布尔类型。它检查你是要升序排序还是降序排序
把最上面的答案推到一个原型中按键排序。
Array.prototype.alphaSortByKey= function (key) {
this.sort(function (a, b) {
if (a[key] < b[key])
return -1;
if (a[key] > b[key])
return 1;
return 0;
});
return this;
};