首页 新闻 会员 周边

sort排序问题

0
悬赏园豆:10 [已解决问题] 解决于 2016-08-25 11:41
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>sort</title>
</head>
<body>

</body>
<script type="text/javascript">
    function compare(value1,value2){
        if(value1>value2){
            return -1;
        }else if(value1<value2){
            return 1;
        }else{
            return 0;
        }
    }
    function compare1(value1,value2){
        if(value1>value2){
            return 1;
        }else if(value1<value2){
            return -1;
        }else{
            return 0;
        }
    }
    var array = [3,7,2,8,2,782,7,29,1,3,0,34];
    console.log(array.sort(compare));//[782, 34, 29, 8, 7, 7, 3, 3, 2, 2, 1, 0]
    console.log(array.sort(compare1));//[0, 1, 2, 2, 3, 3, 7, 7, 8, 29, 34, 782]
</script>
</html>

想问下就是compare跟compare1有什么区别呢,为什么可以让一个实现倒序一个实现顺序呢,return -1,跟return 1??求大神赐教

改吧的主页 改吧 | 初学一级 | 园豆:104
提问于:2016-08-24 10:41
< >
分享
最佳答案
1

这跟C#没什么区别吧?sort可以传一个自定义函数来让你自定义排序规则。。。

在C#中,比如你要对比两个person,编译器怎么知道两个person谁大谁小啊?你自定义排序规则,比如:你自己定义,两个人年龄大的就是大;可以,定义:两个人身高高的就是大,也可以;就是这样。。。

 

而在sort函数里面,已经定义好了,如果两个比较,大于0就是前面大,小于0就是后面大,仅此而已。。。

收获园豆:10
顾晓北 | 专家六级 |园豆:10844 | 2016-08-24 10:58

你的意思是return -1就2,1;return 1就1,2这个是定义好的?并没有什么特别的?

改吧 | 园豆:104 (初学一级) | 2016-08-24 11:02

@小码农雯: 对,return-1的你可以让他return-2试试?应该是一样的。。。

顾晓北 | 园豆:10844 (专家六级) | 2016-08-24 11:05

要是真的是定义好的没有其他别的含义的话我能理解,但是我不懂为什么要这样定义呢

改吧 | 园豆:104 (初学一级) | 2016-08-24 11:24

@小码农雯: 。。。这个问题就不好回答了,就是这么定义的,这样定义不是挺好的么?1是有一个默认排序规则来排序,另外你可以自定义排序规则。。。

顾晓北 | 园豆:10844 (专家六级) | 2016-08-24 11:29

@顾晓北: 哈哈 谢谢谢谢 

改吧 | 园豆:104 (初学一级) | 2016-08-24 11:32
其他回答(3)
1

compare和compare1是你定义的函数名,下面只不过是调用的那个函数

爱吃de馒头 | 园豆:255 (菜鸟二级) | 2016-08-24 10:44

我知道,但是我就是想问下这两个函数的区别在哪里?

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2016-08-24 10:45

@小码农雯: 区别就在返回值上,先是两个数比较,1和-1的区别也就是排序的顺序,如果1>2,输出为-1;

则排序为2,1;如果输出为1,则为1,2;就是给你定义一个排序的函数;

支持(0) 反对(0) 爱吃de馒头 | 园豆:255 (菜鸟二级) | 2016-08-24 10:50

@爱吃的馒头: 想问下就是为什么输入-1的时候会排序会2,1呢输入1的时候会1,2呢

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2016-08-24 10:52

@小码农雯: 没有无语,哈哈,那时候有点事,怎么样,现在明白了吗?

支持(0) 反对(0) 爱吃de馒头 | 园豆:255 (菜鸟二级) | 2016-08-24 13:49

@爱吃的馒头: 嘿嘿 现在听他们这么说差不多明白了 

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2016-08-24 14:29

@小码农雯: 嗯嗯,那就行,明白了就可以了!

支持(0) 反对(0) 爱吃de馒头 | 园豆:255 (菜鸟二级) | 2016-08-24 15:48
1

1和-1是指什么情况下需要将比较的两个值交换位置,还有值不一定是1或-1而是正数或者是负数,所以这两个函数不用这么麻烦compare(value1,value2){return (value2-value1)}

compare1(value1,value2){return (value1-value2)}

筱申 | 园豆:223 (菜鸟二级) | 2016-08-24 11:03

还是同样的问题 return -1就2,1;return 1就1,2为什么呢?

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2016-08-24 11:09

@小码农雯:排序默认是如果前一个和后一个做差比较,如果返回结果大于0就交换位置,也就是说默认就是升序,为了达到倒叙就必须强制改变差值返回来达到了。

支持(0) 反对(0) 筱申 | 园豆:223 (菜鸟二级) | 2016-08-24 11:30

@筱申: 哈哈 谢谢谢谢 大概懂了

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2016-08-24 11:32
0

设个断点不就知道它是如何执行了吗

181027923 | 园豆:170 (初学一级) | 2016-08-24 15:08

??不懂

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2016-08-24 15:09

@小码农雯: 你是用vs 开发吧,那你百度一下,vs怎样调试代码

支持(0) 反对(0) 181027923 | 园豆:170 (初学一级) | 2016-08-24 15:15

@181027923: 不是哦 我是用sublime开发

支持(0) 反对(0) 改吧 | 园豆:104 (初学一级) | 2016-08-24 15:27

@小码农雯: Sublime Text中写完的代码在谷歌浏览器中运行时也可以设置断点

支持(0) 反对(0) 安得浮生半日闲 | 园豆:282 (菜鸟二级) | 2016-08-24 21:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册