我得到了一个数组(见下面数组中的一个对象),我需要使用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"
};
当前回答
就像这样:
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)
});
其他回答
我们可以使用localeCompare,但也需要检查键是否有假值
如果一个条目缺少lname,下面的代码将无法工作。
obj.sort((a, b) => a.lname.localeCompare(b.lname))
所以我们需要检查如下所示的假值
让obj = [ {名称:“约翰”,lname:“母鹿”,地址:“阿拉斯加”}, {lname名字:“汤姆”:“希望”,地址:“加州”}, {名称:“哈利”,地址:“德州”} ] 让字段=“lname”; console.log (obj。sort((a, b) => (a[field] || ""). tostring()。localeCompare((b[field] || "").toString())));
OR
我们可以使用lodash,非常简单。它将检测返回值,即数字或字符串,并相应地进行排序。
import sortBy from 'lodash/sortBy';
sortBy(obj,'name')
https://lodash.com/docs/4.17.5#sortBy
您可以使用内置的数组方法-排序。该方法以一个回调方法作为参数
// custom sort function to be passed as param/callback to the Array's sort method
function myCustomSort(a, b) {
return (a.toLowerCase() > b.toLowerCase()) ? 1 : -1;
}
// Actual method to be called by entity that needs sorting feature
function sortStrings() {
var op = Array.prototype.sort.call(arguments, myCustomSort);
}
// Testing the implementation
var sortedArray = sortStrings("Burger", "Mayo1", "Pizza", "boxes", "Apples", "Mayo");
console.log(sortedArray); //["Apples", "boxes", "Burger", "Mayo", "Mayo1", "Pizza"]
理解这段代码需要注意的要点。
在本例中,自定义方法myCustomSort应该为每个元素对(来自输入数组)比较返回+1或-1。 在自定义排序回调方法中使用toLowerCase()/toUpperCase(),这样大小写差异不会影响排序过程的正确性。
我希望这个解释足够清楚。如果你认为需要更多信息,请随意评论。
干杯!
如果比较的字符串包含unicode字符,您可以使用String类的localeCompare函数,如下所示:
users.sort(function(a,b){
return a.firstname.localeCompare(b.firstname);
})
您可以将此用于对象
transform(array: any[], field: string): any[] {
return array.sort((a, b) => a[field].toLowerCase() !== b[field].toLowerCase() ? a[field].toLowerCase() < b[field].toLowerCase() ? -1 : 1 : 0);}
基本上你可以用sort方法对数组排序,但如果你想对对象排序,你就必须传递function给数组的sort方法,我会给你一个使用数组的例子
user = [
{
bio: "<null>",
email: "user@domain.example",
firstname: "Anna",
id: 318,
last_avatar: "<null>",
last_message: "<null>",
lastname: "Nickson",
nickname: "anny",
},
{
bio: "<null>",
email: "user@domain.example",
firstname: "Senad",
id: 318,
last_avatar: "<null>",
last_message: "<null>",
lastname: "Nickson",
nickname: "anny",
},
{
bio: "<null>",
email: "user@domain.example",
firstname: "Muhamed",
id: 318,
last_avatar: "<null>",
last_message: "<null>",
lastname: "Nickson",
nickname: "anny",
},
];
var ar = user.sort(function (a, b) {
var nA = a.firstname.toLowerCase();
var nB = b.firstname.toLowerCase();
if (nA < nB) return -1;
else if (nA > nB) return 1;
return 0;
});