【问题标题】:How decipher the sort method in JavaScript? [duplicate]如何破译 JavaScript 中的排序方法? [复制]
【发布时间】:2020-01-06 19:59:10
【问题描述】:

我想了解 sort() 方法在 JavaScript 中的工作原理,我知道 sort 有一个默认的比较函数,但我想传递一个函数并了解它如何处理该函数。

我想按字母顺序对以下数组["a", "d", "c", "a", "z", "g"] 进行排序,但是当我使用方法arr.sort((a,b) => a>b); 时返回相同的数组而不进行排序。

拜托,任何人都可以向我解释一下。

我正在学习 JavaScript 并试图理解数组中的方法,例如 map()reduce()filter(),但我陷入了 sort() 方法中。

let arr = ["a", "d", "c", "a", "z", "g"];
console.log(arr.sort((a,b) => a>b));

结果是["a", "d", "c", "a", "z", "g"],但我想要["a", "a", "c", "d", "g", "z"]

而且我知道如果我使用不带参数的 sort() 方法,算法会对它进行排序,但我想了解为什么它不能使用参数。

【问题讨论】:

  • arr.sort((a,b) => a.localeCompare(b));
  • 该方法期望有差异而不是布尔值,但您可以不带参数调用该方法:console.log(arr.sort());
  • Gracias por sus comentarios, con la función localeCompare() tuve unos problemas con mi objetivo, ya que 'b'.localeCompare('A') me devuelve 1, y estaba buscando que se relacionara a los ASCII, lo que mejor me funcionó fue esto: arr.sort( (b,a) => a.charCodeAt() - b.charCodeAt() )

标签: javascript arrays sorting


【解决方案1】:

您的函数返回一个布尔值,但应该返回一个数字。让我们看看将布尔值转换为数字时会发生什么:

console.log((3>2)+0); // returns 1
console.log((3==2)+0); // returns 0
console.log((3<2)+0); // returns 0

因此,当 a == b 和 a > b 时,您最终会得到相同的整数值。

根本问题是您需要一个函数来返回三个可能的值,0、-1 和 1。

【讨论】:

  • 好的,我现在知道了,我的函数永远不会得到负值并且排序不起作用。
【解决方案2】:

let arr = ["a", "d", "c", "a", "z", "g"];
document.querySelector("#sorted").innerHTML = arr.sort((a, b) => {

 if (a > b) {
    return 1;
  } else if (a < b) {
    return -1;
  } else {
    return 0;
  }
}).join(", ");
&lt;div id="sorted"&gt;&lt;/div&gt;

当您进行排序时,基本上会使用所选的排序算法(合并排序、快速排序等)进行大量比较,以将项目放置在特定位置。 See array sorting on mdn

默认比较可能不适用于所有情况。为此,您可以提供一个比较函数来明确说明您希望如何比较两个项目。 您必须根据一些任意标准指定项目 1 是否应该出现在项目 2 之前/之后/相邻。 (您正在寻找词汇位置)。因此,在这种情况下,您必须指定所有这些情况,而您尚未指定包括等于的情况。

因此,以下内容应该可以满足您的需求。

let arr = ["a", "d", "c", "a", "z", "g"];
console.log(arr.sort((a, b) => {

 if (a > b) {
    return 1;
  } else if (a < b) {
    return -1;
  } else {
    return 0;
  }
}));

【讨论】:

  • 就是这样,非常感谢。
【解决方案3】:

您好,如果您使用的是自定义函数,那么预计会返回一个负数、零或正值,例如:

0、1 或 -1

当您返回 0 时,这意味着 A 值 === 而不是 B(预期没有变化) 当你返回一个负数,比如 -1 时,sort 函数会将 A 排序为低于 B 的值。 当您返回像 1 这样的正数时,排序函数会将 A 排序为高于 B 的值。

【讨论】:

  • 哦,谢谢,这是我的问题,我的函数没有返回负数进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 2018-02-08
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多