【问题标题】:Should I check array length when using sort method in JavaScript?在 JavaScript 中使用排序方法时我应该检查数组长度吗?
【发布时间】:2017-03-08 02:57:30
【问题描述】:

我对 JavaScript 中的 array.sort() 方法有疑问。数组中的一组值可以从 1 到更多。如果有多个元素,排序功能应按顺序对它们进行排序。这是我的代码:

var myDates = ["03/05/2017","02/01/2017","03/02/2017"];

myDates.sort(function(a,b) {
    a = a.split('/').reverse().join('');
    b = b.split('/').reverse().join('');
    return a > b ? 1 : a < b ? -1 : 0;
});

上面的代码运行良好,所有日期都已排序。我的问题是我应该在运行排序方法之前检查数组的长度吗?我问这个是因为我的数组只能在某些情况下有一个元素。到目前为止,当我仅使用一个元素进行测试时,我的代码没有抛出任何错误,但我想知道是否应该在运行 sort() 之前检查数组的长度,还是 JavaScript 已经处理好了?如果有人知道答案,请告诉我。谢谢。

【问题讨论】:

  • 好吧...检查自己发生了什么,对于 0 和 1 元素 - 提示,在回调中放置一个 console.log
  • 这将如何帮助我得到答案?我知道如果我有多个元素,我的函数会产生什么,但我想知道如果我的元素少于两个,我是否应该阻止我的函数运行。
  • 很好 ...如果元素少于 2 个,甚至不会调用排序回调 - 因此,您无需检查长度。老实说,我只是觉得你可能想学习如何学习
  • 我试过了,但是 console.log() 没有在回调函数内部产生任何输出。感谢您的解释。

标签: javascript arrays sorting


【解决方案1】:

此行为记录在Array.prototype.sort 规范中。见http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.sort

具体来说:

SortCompare 调用的参数是先前调用 [[Get]] 内部方法返回的值,除非根据 HasOwnProperty,这些先前调用访问的属性不存在。如果 SortCompare 的两个透视参数都对应于不存在的属性,请使用 +0 而不是调用 SortCompare。如果只有第一个透视参数不存在,则使用 +1。如果只有第二个透视参数不存在,则使用 -1。

简而言之:

Array.prototype.sort((undefined, undefined) =&gt; { ... }); // =&gt; 0

Array.prototype.sort((undefined, b) =&gt; { ... }); // =&gt; 1

Array.prototype.sort((a, undefined) =&gt; { ... }); // =&gt; -1

【讨论】:

  • 不,这是相关的。如果 SortCompare 的两个透视参数都对应于不存在的属性,请使用 +0 而不是调用 SortCompare...
  • 对不起,我明白你在说什么 - 你使用的代码 undefined 让我感到困惑 - 将删除我的“批评”:p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多