JavaScript Object Sort方法

时间:2017-06-15 20:56:26

标签: javascript arrays sorting

在compareNumeric fn我不明白这个概念与比较。 要查看更详细:if(5> 3)返回1;那么什么是返回1并返回-1;它是如何工作的,它如何影响排序方法。拜托,帮帮我!

function compareNumeric(a, b) {
  if (a > b) return 1;
  if (a < b) return -1;
}

var arr = [ 1, 2, 15, 14, 66, 434, 112, 3 ];

arr.sort(compareNumeric);

alert(arr);  // sorted array

1 个答案:

答案 0 :(得分:1)

MDN's documentation for Array.prototype.sort会有所帮助。基本上,sort重复调用回调,具有来自数组的两个条目的各种组合。回调的返回值告诉sort 1)a是否应该在结果b之前(通过返回负值),或者2)a应该在b之后{1}}在结果中(通过返回正值)或3)ab等同于排序目的,因此无关紧要(通过返回0)。

您的示例compareNumeric有一个错误:如果0既不是a也不是< >,它应该返回b,而是它不会返回任何内容,因此调用它会导致undefined。代替:

function compareNumeric(a, b) {
    if (a > b) { return 1; }
    if (a < b) { return -1; }
    return 0;
}

但是,还有另一个问题:它永远不会检查ab是否真的是数字。如果作者很高兴假设他们是数字,那么它可以是一个更简单的函数:

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

如果ab都是数字,那么如果a - b小于ab将为负数,因此应该在a之前结果,如果b大于0,则为正数,因此应该在结果中为a,如果bArray#sort相等,则为Array#sort

请注意,调用回调的次数以及规范未定义的顺序;它说的是function compareNumeric(a, b) { if (a > b) return 1; if (a < b) return -1; return 0; } var arr = [ 1, 2, 15, 14, 66, 434, 112, 3 ]; arr.sort(function(a, b) { var result = compareNumeric(a, b); console.log("a = " + a + ", b = " + b + "; returning " + result); return result; }); console.log(arr.join()); // sorted array将根据需要调用回调并使用结果信息。

让我们看看.as-console-wrapper { max-height: 100% !important; }给你的例子提出的论点;再次注意,这将取决于实现:

public void java8TimeWTF() {
  OffsetDateTime odt = OffsetDateTime.parse(
    "2012-02-12T09:08:13.123456-0400",
    DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nZ"));
  Instant i = odt.toInstant();
  System.out.printf("odt: %s, i: %s\n", odt, i);
}
odt: 2012-02-12T09:08:13.000123456-04:00, i: 2012-02-12T13:08:13.000123456Z