我不明白" return "值如何影响排序


function compare(a, b) {
  if (a is less than b by some ordering criterion) {
  // how minus 1 will affect to sort? how sort will understand this value? 
 return -1; 
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
} 

或下一个示例:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]

我知道只知道1和0的" true"或" false"。/p>

Array.prototype.sort函数期望回调返回一个数字,而不是布尔值(例如,不是truefalse)。它使用该号码来知道它给出的两个条目的排序应该是什么。您可以想象sort中的逻辑与这些行:

result = callback(a, b);
if (result < 0) {
    // Make sure `a` is before `b`
} else if (result > 0) {
    // Make sure `b` is before `a`
} else {
    // It doesn't matter which is first, they're equivalent
}

如您所见,truefalse不涉及(除了<>的结果)。

这意味着,如果ab是数字,并且回调返回a - b,它将以数值为单位,因为如果a小于b,则结果将为负面;如果a大于b,则结果将为正;如果它们相同,结果是0

MDN的文档很好地描述了这一点:

arr.sort(compareFunction)

如果提供了compareFunction,则对数组元素进行排序 根据比较函数的返回值。如果A和B是 然后比较两个元素,然后:

  • 如果compareFunction(a,b)小于0,则将A排序a索引比b低,即A首先出现。
  • 如果compareFunction(a,b)返回0,则彼此之间保持A和B的不变,但相对于所有人进行排序 不同的元素。注意:Ecmascript标准不
    保证这种行为,因此并非所有浏览器(例如Mozilla
    ) 至少可以追溯到2003年的版本尊重这一点。
  • 如果compareFunction(a,b)大于0,则将B排序为较低的索引。比较功能(a,b)必须始终返回相同的 当给予特定元素A和B作为两个元素A和B时的价值 争论。如果返回结果不一致,则排序订单 是未定义的。

相关内容

  • 没有找到相关文章

最新更新