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

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

当前回答

我们可以使用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

其他回答

漂亮的小ES6内衬:

users.sort((a, b) => a.firstname !== b.firstname ? a.firstname < b.firstname ? -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;
});

您可以将此用于对象

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

我很惊讶居然没人提到Collators。除非迫不得已,否则不应该使用localeCompare,因为它的性能明显较差

const collator = new Intl.Collator('zh-CN'); // Chinese Simplified for example

function sortAsc(a, b) {
  if (typeof a === 'string' && typeof b === 'string') {
    return collator.compare(b, a)
  }

  return b - a;
}

function sortDesc(a, b) {
  if (typeof a === 'string' && typeof b === 'string') {
    return collator.compare(a, b);
  }

  return a - b;
}

try

users.sort((a,b)=> (a.firstname>b.firstname)*2-1)

Var用户= [ {firstname:“Kate”,id: 318, /*…* /}, {名字:“安娜”,id: 319, /*…* /}, {名字:“christine”,id: 317, /*…* /}, ] Console.log (users.sort((a,b)=> (a.firstname>b.firstname)*2-1));