我得到了一个数组(见下面数组中的一个对象),我需要使用JavaScript按名字排序。 我该怎么做呢?

var user = {
   bio: null,
   email:  "user@domain.example",
   firstname: "Anna",
   id: 318,
   lastAvatar: null,
   lastMessage: null,
   lastname: "Nickson",
   nickname: "anny"
};

当前回答

Underscorejs提供了非常好的_。sortBy功能:

_.sortBy([{a:1},{a:3},{a:2}], "a")

或者你可以使用自定义排序函数:

_.sortBy([{a:"b"},{a:"c"},{a:"a"}], function(i) {return i.a.toLowerCase()})

其他回答

就像这样:

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)
});

您可以使用内置的数组方法-排序。该方法以一个回调方法作为参数



    // 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(),这样大小写差异不会影响排序过程的正确性。

我希望这个解释足够清楚。如果你认为需要更多信息,请随意评论。

干杯!

假设您有一个用户数组。你可以使用用户。排序并传递一个函数,该函数接受两个参数并进行比较(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。请看其他答案。

更紧凑的表示法:

user.sort(function(a, b){
    return a.firstname === b.firstname ? 0 : a.firstname < b.firstname ? -1 : 1;
})

基本上你可以用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;
});