【问题标题】:Why Array.prototype.sort() doesn't work in Chrome developement tool? [duplicate]为什么 Array.prototype.sort() 在 Chrome 开发工具中不起作用? [复制]
【发布时间】:2018-11-22 14:27:13
【问题描述】:

const arr = [{name:'Suzanne'},{name:'Jim'},{name:'Trevor'},{name:'Amanda'}];

arr.sort((a,b)=>a.name > b.name);

我想按字母顺序(A->Z)对数组名称中的元素(对象)进行排序。当我在 node(v8.4.0) 和 safari 开发工具(console) 中使用代码时,它运行良好。

但在 chrome 开发工具-console(v70.0.3538.110) 中不起作用。 chrome控制台中有代码结果。

在我看来,代码没有错。我不知道为什么代码不能正常工作。

【问题讨论】:

  • When I use the code in node(v8.4.0) and safari development tool(console), it works well. 这很有趣,因为 sort 方法期望回调返回一个 number,而上面的表达式返回一个 boolean。该代码正确,或者至少,您的代码不符合您的预期。
  • 谢谢,briosheje。我认为排序方法的回调可以返回 boolean。但这是错误的。 Safari 控制台和节点很奇怪...;(

标签: javascript arrays google-chrome sorting ecmascript-6


【解决方案1】:

.sort() 回调必须返回一个数字,而不是布尔值。返回值应该是:

  • 如果第一个元素应该在第二个元素之前,则为负数;
  • 如果第一个元素应该在第二个元素之后,则为正数;
  • 如果两个元素的顺序相同,则为零。

对于字符串,可以使用.localeCompare()方法:

arr.sort((a,b) => a.name.localeCompare(b.name));

【讨论】:

  • 谢谢!但这意味着节点和 Safari 控制台是错误的(或者不遵循 ECMAScript 标准)。因为代码是错误的,但它们运行良好..:(
  • @eje “错误”的排序比较器有时可以工作;这取决于排序算法的非常具体的细节。
  • 感谢Pointy,我知道了一些新东西。
猜你喜欢
  • 2020-05-03
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
相关资源
最近更新 更多