> 信息中心 >

sort(compare)方法

来源:互联网 编辑:刘梓楠

有网友碰到过这样的问题:sort(compare)方法,问题详细内容为: 最近在看js高级3,书中对于排序地方自己读了很不了解

sort()函数可以对数组进行排序,他默认是将数组中的元素调用toString()方法,所以得到的结果会是1,25,3
很显然这不是我们要的结果,所他传入了compare方法作为参数

function compare(a,b){ if(a>b){ return sha? } if(a=b){ return 0 } if(a<b){ return sha? } } 我不理解的是执行原理是什么样的?先执行哪个函数?compare函数只有2个参数,为什么会依次去拿数组中的元素? 求大神帮我捋捋思路 sort函数 compare函数 问题补充: 我此时还是没有理解函数带括号和不带括号的区别 带括号是是调用函数 不带括号是将整个函数放在那个地方 看例子 function isBelowThreshold(currentValue) { return currentValue < 40; } var array1 = [1, 30, 39, 29, 10, 13]; console.log(array1.every(isBelowThreshold)); // expected output: true 这里我就很在意括号内的那个函数名

我知道可以写成这样

console.log(array1.every(isBelowThreshold)); //改成 console.log(array1.every(function isBelowThreshold(currentValue) { return currentValue < 40; }); 所以这里就是一个方法去比较数组中数是否小于40,然后数组中数默认就去比较? 那么问题来了why?我感觉结论就好像要出来,但是不理解咋办? ,我搜你通过互联网收集了相关的一些解决方案,希望对有过相同或者相似问题的网友提供帮助,具体如下:

解决方案1:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort 奖励园豆:5
============================================
谢谢!我又看到 数组中的reduce方法,也是传入函数,参数是 prev,curr
这些都是类似的吧
============================================
@无所不能的风:
  1. js中reduce、every、map这些api是吸收了FP(函数式编程)的优点引入的,这些api有一个特点,就是将函数名作为变量传入到函数中,这些函数有个专业名词叫高阶函数
  2. 函数名也是可以作为变量的,如果你学过C语言,可以类比函数指针,它跟var i = 1这种的区别在于它指向的是一个函数,函数一般是有参数的(无参可以看成是有参的特例),所以函数变量是不完整的,需要在运行时传入参数
  3. 回到sort上来,我们来自己实现一个冒泡排序方法
function bubbleSort(arr){ for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - i - 1; j++) { // 顺序:如果前一个数大于后一个数,则交换 if(arr[j] > arr[j + 1]){ const temp = arr[j] arr[j] = arr[j + 1] arr[j + 1] = temp } } } } const array = [1, 10, 5, 2, 6, 9, 8] bubbleSort(array) console.log(array) // Output: [1, 2, 5, 6, 8, 9, 10] 上面是顺序,如果需要倒序,则要将大于改成小于,其它不变。根据IoC控制反转思想,这种变化应该交给调用者。现在就变成了如何抽象这个if条件,它的输入是两个变量(分别是数组的前后两个元素),输出是一个bool,这正好可以用一个bool compare(n1, n2)函数来表示,所以可以改造成如下: // 顺序比较 function orderedCompare(n1, n2){ return n1 > n2 } // 倒序比较 function reversedCompare(n1, n2){ return n1 < n2 } function bubbleSort(arr, compare){ for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - i - 1; j++) { if(compare(arr[j], arr[j + 1])){ const temp = arr[j] arr[j] = arr[j + 1] arr[j + 1] = temp } } } } const array = [1, 10, 5, 2, 6, 9, 8] bubbleSort(array, reversedCompare) console.log(array) // Output: [10, 9, 8, 6, 5, 2, 1] 上面的compare函数也可以用ES6箭头函数来代替简化。
大概就是这样了。
============================================
@jello chen: 首先我应该谢谢你,占用了你的私人时间。对于你讲解的东西,我稍微了解了大概,我差的实在是太多了。谢谢你,新年快乐!
============================================
@无所不能的风: 新年快乐!
解决方案2:
其实这里就是一个回调函数,有的回调函数会返回一个类型的数据,我们可以用变量来接受,var xx = function(){
}这里传入的xx其实可以转化成function(){},就相当于一个匿名函数
我也不知道我说的是不是我这意思, 那就这样吧 再爱都曲终人散啦
那就分手吧 再爱都无需挣扎
不要再问我 怎舍得拱手让他

sort函数的具体用法?

答:MSDN中的定义: template void sort(RanIt first, RanIt last); //--> 1)template void sort(RanIt first, RanIt last, Pred pr); //--> 2) 头文件: #include using namespace std; 1.默认的sort函数是按升序排。对应于1) sort(a,a+n); //两...

java compare 降序/升序怎么确定

答:我印象中如果不重写compareTo方法那返回值都是-1吧...... 我一般都是实现Comparable接口,重写CompareTo方法就可以了。 至于降序升序,可以这样比较: 假如A的值大于B,你返回1。这样调用Collections.sort()方法就是升序 假如A的值大于B,你返回...

java中的sort方法排序问题

答:这个是看你的业务的,给你个例子,你自己对照下 List data = new ArrayList(); data.add(1); data.add(3); data.add(2); //默认的,升序 Collections.sort(data); System.out.println(data); // 实现了compareTo方法,实现降序 Collections.sort(dat...

java里面一个类想用arrays.sort(object a)的方法,...

答:package p1;import java.util.Arrays;public class Degree implements Comparable{private double x;private double y;public Degree ( double x, double y ){this.x = x;this.y = y;}@Overridepublic String toString (){StringBuilder builder...

Collections.sort(中的compareTo属性是什么意思

答:如果你想用Collections.sort方法的话 就要先实现compareTo接口,这样当你使用sort的时候,程序才知道用什么进行排序,怎么排序。 所以compareTo方法就是你sort排序的预定义。

C#winform DataGridView的sortcompare是怎么触发的

答:如果你的某一列设置为可排序的(SortMode 属性),点击列标题就会自动排序,此时触发此事件。或者在代码中通过 Sort() 方法触发。

为什么实现Comparable接口并重写了compareTo()方法...

答:public static void sort(Object[] a)根据元素的自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元素都必须是可相互比较的(也就是说,对于数组中的任何 e1 和 e2 元素而言,e1.compare...

Java 怎么用compareTo接口实现排序

答:package test;public class Field implements Comparable { private String name; private int age; public Field() { } public Field(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } ...

关于javascript中sort()排序的问题,求大神解答!

答:给你个理解的方式,假如sort函数的代码是这样的: Array.prototype.sort(compareFn){ var defaultCompareFn = function(a,b){//(冒泡)排序方式内容}; if(!compareFn || typeof compareFn != 'function'){ compareFn = defaultCompareFn; } //可能...

C++ sort函数

答:比较函数是为了区分两个参数是大于等于或者小于,分别以返回值大于0、等于0和小于0来判定。 因为排序的目的主要是让决定谁在前谁在后的问题,所以通常你只需要定义小于就行了。如果compare(a,b)是判定a < b,那么根据基本的逻辑,compare(b,a)肯...


请注意,本站信息均收集自互联网,相关信息仅供参考,医疗等重要信息请以正规途径为最终意见,本站不承担任何责任!

www.wosoni.com false 互联网 http://www.wosoni.com/blogcnk/mm/ccdecc.html report 5018 解决方案1:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort奖励园豆:5============================================谢谢!我又看到 数组中的reduce方法,也是传入函数,参数是 prev,curr这些都是类似的吧============================================@

热门图片