我被一本JS书中的例子困住了。这是一个箭头功能。工作正常,但函数指的是什么变量?它是如何知道如何处理" a,b"?
我不明白幕后会发生什么......
const arr = [{
name: "Suzanne"
}, {
name: "Jim"
}, {
name: "Trevor"
}, {
name: "Amanda"
}];
// arr sorted reverse alphabetically
// by second letter of name property
console.log(arr.sort((a, b) => a.name[1] < b.name[1]));
&#13;
答案 0 :(得分:4)
a
和b
的值由Array#sort
函数确定,这是调用箭头函数的函数。它与普通功能相同;例如,您的代码将以相同的方式工作: 1
console.log(arr.sort(function(a, b) {
return a.name[1] < b.name[1];
});
在Array#sort
内,您可以设想调用回调:
function Array_sort(callback) {
// ...
while (not_done_sorting_yet) {
// ...
result = callback(element[x], element[y]); // The call to your callback
// ...code using result...
}
// ...
}
就像任何回调(实际上是任何函数)一样,代码调用它确定它获得的参数及其值。 (为简单起见,忽略部分应用程序。)
1 BTW:该代码错误,sort
回调的返回值应该是数字,而不是布尔值:{{1如果0
和a
等于排序目的,那么b
小于零是“小于”a
用于排序目的(应该在{{1}之前) }},如果b
“大于”b
用于排序,则大于零(应该在a
之后)。
这是正确的版本(对于数组“按名称属性的第二个字母按字母顺序排序”[来自引用代码中的注释]):
b
...因为b
会返回一个适当的值,表示您调用它的字符串是“小于”还是“大于”您调用它的字符串。 (// Reverse alpha by second letter in name
console.log(arr.sort((a, b) => b.name[1].localeCompare(a.name[1])));
是一个单字符串。)