繁体   English   中英

这用于对数组进行排序是如何工作的?

[英]How does this used to sort an array works?

这段代码是如何工作的? 我不明白减号是如何使用的。 我正在使用对象数组。 这是它的工作原理吗? 如果 B 的值是 10,而 A 等于 20,则 10 - 20 是 -10。 当它返回 -10 时,它将首先出现。

player.sort((a,b)=> {
    return b.score - a.score;
});

如果未提供 compareFunction,则所有未定义的数组元素将通过将它们转换为字符串并按 UTF-16 代码单元顺序比较字符串来排序。 例如,“香蕉”在“樱桃”之前。 在数字排序中,9 在 80 之前,但由于数字被转换为字符串,因此在 Unicode 顺序中“80”在“9”之前。 所有未定义的元素都排序到数组的末尾。

注意:在 UTF-16 中,\￿ 以上的 Unicode 字符被编码为两个代理代码单元,范围为 \?-\?。 每个代码单元的值被单独考虑以进行比较。 因此,由代理对 \확\? 形成的字符将排在字符 \Z 之前。

如果提供了 compareFunction,则所有未定义的数组元素将根据比较函数的返回值进行排序(所有未定义的元素都排序到数组的末尾,不调用 compareFunction)。 如果 a 和 b 是要比较的两个元素,则:

如果 compareFunction(a, b) 返回小于 0,则将 a 排序到低于 b 的索引(即 a 在前)。 如果 compareFunction(a, b) 返回 0,则使 a 和 b 彼此保持不变,但相对于所有不同元素进行排序。 注意:ECMAscript 标准不保证这种行为,因此,并非所有浏览器(例如至少可以追溯到 2003 年的 Mozilla 版本)都尊重这一点。 如果 compareFunction(a, b) 返回大于 0,则将 b 排序到小于 a 的索引(即 b 在前)。 当给定一对特定的元素 a 和 b 作为它的两个参数时,compareFunction(a, b) 必须始终返回相同的值。 如果返回不一致的结果,则排序顺序未定义。 因此,比较函数具有以下形式:

function compare(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

为了比较数字而不是字符串,比较函数可以简单地从 a 中减去 b。 以下函数将按升序对数组进行排序(如果它不包含 Infinity 和 NaN):

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

参考: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM