在 JavaScript 中按字母顺序排序 - 如何在 JS 中按名称排序

有时您可能有一个单词数组,您希望按字母顺序(从 az 开始)对每个单词进行排序。或者,您可能有一个包含用户信息(包括名称)的对象数组,例如,您希望在其中按用户名称对用户进行排序。

我们可以在 JavaScript 中sort()直接使用该方法或使用 compare 函数来做到这一点。

如果你赶时间,这里有两种方法:

// order an array of names
names.sort();

// order an array of objects with name
users.sort(function (a, b) {
  if (a.name < b.name) {
    return -1;
  }
  if (a.name > b.name) {
    return 1;
  }
  return 0;
});

现在让我们了解一下我们是如何得出这两种解决方案的。

如何按字母顺序对名称数组进行排序

假设我们有一个名称数组:

let names  = ["John Doe", "Alex Doe", "Peter Doe", "Elon Doe"];

我们可以使用以下方法按字母顺序对这些名称进行排序sort()

let sortedNames = names.sort();
console.log(sortedNames);

这将返回一个按字母顺序排列的名称数组:

["Alex Doe","Elon Doe","John Doe","Peter Doe"]

注意:在某些名称以大写开头而其他名称以小写开头的情况下,输出将不正确,因为该sort()方法将大写字母放在小写之前:

let names = ["John Doe", "alex Doe", "peter Doe", "Elon Doe"];
let sortedNames = names.sort();

console.log(sortedNames); // ["Elon Doe","John Doe","alex Doe","peter Doe"]

所以你需要确保单词都是相同的大小写,否则它不会按照我们想要的字母顺序返回名称。

如何在 JavaScript 中按名称按字母顺序排序

在现实世界的场景中,我们可能有一组用户,每个用户的信息都在一个对象中。此信息可以是用户名旁边的任何内容。例如:

let users = [
  {
    name: "John Doe",
    age: 17
  },
  {
    name: "Elon Doe",
    age: 27
  },
  {
    name: "Alex Doe",
    age: 14
  }
];

看上面的对象,之前我们sort()直接在数组上应用方法的方法是行不通的。相反,它会抛出相同的数组,但项目不会按照我们想要的顺序排列。

我们将使用该sort()方法与 compare 函数一起按名称对这个用户数组进行排序。

我们将使用比较函数来定义替代排序顺序。它根据参数返回负值、零值或正值:

句法:

function(a, b){return a - b}

当我们将此比较函数传递给该sort()方法时,它会根据我们设置的条件比较每个值,然后根据返回值(负、零、正)对每个名称进行排序。

  • 如果结果是否定的,a则排在前面b
  • 如果结果为正,b则排在“a”之前。
  • 如果结果为0,则不会更改两个值的排序顺序。

使用上面的示例,我们现在可以通过sort()这种方式将方法与比较函数一起使用:

users.sort(function (a, b) {
  if (a.name < b.name) {
    return -1;
  }
  if (a.name > b.name) {
    return 1;
  }
  return 0;
});

console.log(users);

上面的代码比较了每个名字。如果大于,则返回 1。如果小于,则返回 -1。否则,它返回 0。返回的值用于按字母顺序排列数组的值:

[
  {
    name: "Alex Doe",
    age: 14
  },
  {
    name: "Elon Doe",
    age: 27
  },
  {
    name: "John Doe",
    age: 17
  }
]

注意:就像我们之前看到的,这总是根据字母大小写工作,并且会在小写之前排序大写字母:

let users = [
  {
    name: "alex Doe",
    age: 14
  },
  {
    name: "Elon Doe",
    age: 27
  },
  {
    name: "John Doe",
    age: 17
  }
];
    
users.sort(function (a, b) {
  if (a.name < b.name) {
    return -1;
  }
  if (a.name > b.name) {
    return 1;
  }
  return 0;
});

console.log(users);

输出:

[
  {
    name: "Elon Doe",
    age: 27
  },
  {
    name: "John Doe",
    age: 17
  },
  {
    name: "alex Doe",
    age: 14
  }
]

包起来

在本文中,您学习了如何sort()在两种可能的情况下使用该方法按字母顺序排列数组。

在名称有不同字母大小写的情况下,最好先将它们转换为特定的字母大小写,然后再使用该sort()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾宝玉单臂擒方腊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值