在 JavaScript 中对数组进行排序

Inê*_*nês 16 javascript

我正在尝试对内部包含整数的数组进行排序,例如:

var array = [[123, 3], [745, 4], [643, 5], [643, 2]];
Run Code Online (Sandbox Code Playgroud)

如何对其进行排序以返回如下内容?

array = [[745, 4], [643, 2], [643, 5], [123, 3]];
Run Code Online (Sandbox Code Playgroud)

小智 32

您可以将自定义比较函数传递给Array.prototype.sort(),如下所示:

var sortedArray = array.sort(function(a, b) { return a - b; });
Run Code Online (Sandbox Code Playgroud)

这将按升序对整数数组进行排序。比较函数应该返回:

  • 一个小于0如果你想出a现在之前的整数b
  • 一个整数,它是大于0,如果你想b朝见a
  • 0如果a和b是一样的

所以,对于这个例子,你会想要这样的东西:

var sortedArray = array.sort(function(a, b) {
  return b[0] - a[0];
});
Run Code Online (Sandbox Code Playgroud)

如果您想对每个子数组的两个元素进行排序(即按第一个元素降序排序,如果它们相同则按第二个元素降序排序),您可以这样做:

var sortedArray = array.sort(function(a, b) {
  if (a[0] == b[0]) {
    return a[1] - b[1];
  }
  return b[0] - a[0];
});
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort。

  • 我注意到比较运算符可以应用于数组并且它可以工作,但是它没有记录在任何地方,例如 `[2, 2] > [1, 3]` 为 true 并且 `[1, 0] > [0, 1]`是真的...等等 (2认同)

Nen*_*car 9

您可以使用sortmethod 并首先按第一个元素排序,然后按第二个元素排序。

var array = [[123, 3], [745, 4], [643, 5], [643, 2]];
array.sort(([a, b], [c, d]) => c - a || b - d);
console.log(array)
Run Code Online (Sandbox Code Playgroud)


小智 9

假设您想按示例中的第一个索引进行排序,则可以使用排序函数来解决您的问题。

let ans = [[123, 3], [745, 4], [643, 5], [643, 2]].sort( (a, b) => {
  return b[0] - a[0]
})

console.log(ans)
Run Code Online (Sandbox Code Playgroud)