当前位置:  开发笔记 > 编程语言 > 正文

为什么points.sort(function(a,b){return ab}); 返回-1,0或1?

如何解决《为什么points.sort(function(a,b){returnab});返回-1,0或1?》经验,为你挑选了2个好方法。

我的困难可能是我的数学文盲,但我试图在JavaScript数组中对一些数字进行排序,这是我在网上找到的解决方案.它确实有效,但我的问题是为什么?!我真的很想理解这段代码.

该网站,W3学校说:

您可以通过提供返回-1,0或1的函数来解决此问题:

var points = [40, 100, 1, 5, 25, 10];

points.sort(function(a,b){return a-b});

为什么只返回-1,0或1?我有谷歌搜索,返回几乎可以返回任何你想要的值.

再次,如果这是一个令人难以置信的愚蠢问题,我道歉.



1> Felix Kling..:

排序回调必须返回

负数如果 a < b

0 如果 a === b

如果是正数 a > b

需要三个可能的返回值,因为sort函数现在需要a小于,等于或大于b为了正确定位a在结果数组中.

这是很常见的,只是返回-1,0并且1如果用非数字数据的工作(我想这就是为什么W3Schools的提到它).但是如果你使用数值数据,你可以简单地减去这些值,因为

如果a < b那么a - b < 0,即负数

如果a === b那么a - b === 0,即0

如果a > b那么a - b > 0,即一个正数


W3Schools不是很精确,这也是你应该避免它的原因之一.请改用MDN.



2> Alireza..:

它不一定是-1,0,1,任何负数或正数都可以做到这一点.

但它是如何工作的?sort()方法需要知道每两个元素之间的关系,以便对它们进行排序.对于每对(根据所使用的算法),它根据返回值调用函数,可以交换它们.请注意,a-b如果返回负值,则返回b>a正值a>b.这导致升序.

只是为了测试,替换a-bb-a,你将得到一个降序.您甚至可能会使它更复杂,根据(例如)最不重要的数字对它们进行排序:

a.sort(function() {return (a%10) - (b%10);}

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有