【问题标题】:Can someone explain the difference between these JS functions one with callback and other no with callback有人能解释一下这些 JS 函数之间的区别吗?一个有回调,另一个没有回调
【发布时间】:2017-06-12 10:00:24
【问题描述】:

我们可以对数组进行排序:

1.

var values = [0,3,2,5,7,4,8];
console.log(values.sort());

2.

var values = [0,3,2,5,7,4,8];
values.sort(function(v1,v2){
    return v1-v2;
});
console.log(values);

两者都提供相同的输出,但哪个更快或更好?

【问题讨论】:

  • 尝试将一些 2 位数字添加到数组中,然后比较结果。

标签: javascript arrays sorting callback


【解决方案1】:

除非数组中的所有数字都具有相同的位数,否则它们是不等价的。 sort() 的默认比较函数将数组元素作为字符串而不是数字进行比较,并且字符串 "10" 小于 "2"。如果将 2 位数字添加到数组中,您可以看到差异。

var values = [0,3,2,5,7,4,8, 10];
console.log(JSON.stringify(values.sort()));
console.log(JSON.stringify(values.sort(function(v1,v2){
    return v1-v2;
})));

比较他们的表现似乎没有意义,因为他们做的事情不同,而且很可能第一种形式完全是错误的。

【讨论】:

  • 所以你的意思是说第一个方法 values.sort();不适用于数组 var values = [0,3,2,5,7,4,8,99,45];那么我们什么时候应该使用 sort 来对数组进行排序,这让我很困惑。
  • @Brenton 您可以使用它对字符串数组进行排序。 ["dog", "cat", "elephant"].
  • 我明白了,那么您认为最好的数字排序方法是什么?
【解决方案2】:

所以第一个.sort() 调用使用默认比较器,可以在本文档中找到参考。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

“如果未提供 compareFunction,则通过将元素转换为字符串并按 Unicode 代码点顺序比较字符串来对元素进行排序。”

第二个排序使用您的自定义比较器,它进行整数比较而不是字符串比较。

第二个应该更快,因为它不需要在比较之上进行字符串转换。

【讨论】:

    猜你喜欢
    • 2019-10-24
    • 2016-07-30
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多