在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
答案 0 :(得分:1)
MDN's documentation for Array.prototype.sort
会有所帮助。基本上,sort
重复调用回调,具有来自数组的两个条目的各种组合。回调的返回值告诉sort
1)a
是否应该在结果b
之前(通过返回负值),或者2)a
应该在b
之后{1}}在结果中(通过返回正值)或3)a
和b
等同于排序目的,因此无关紧要(通过返回0)。
您的示例compareNumeric
有一个错误:如果0
既不是a
也不是<
>
,它应该返回b
,而是它不会返回任何内容,因此调用它会导致undefined
。代替:
function compareNumeric(a, b) {
if (a > b) { return 1; }
if (a < b) { return -1; }
return 0;
}
但是,还有另一个问题:它永远不会检查a
和b
是否真的是数字。如果作者很高兴假设他们是数字,那么它可以是一个更简单的函数:
function compareNumeric(a, b) {
return a - b;
}
如果a
和b
都是数字,那么如果a - b
小于a
,b
将为负数,因此应该在a
之前结果,如果b
大于0
,则为正数,因此应该在结果中为a
,如果b
和Array#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