> 信息中心 >

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(){},就相当于一个匿名函数
我也不知道我说的是不是我这意思, 那就这样吧 再爱都曲终人散啦
那就分手吧 再爱都无需挣扎
不要再问我 怎舍得拱手让他

java compare 降序/升序怎么确定

答:public int compare(Object o1, Object o2) 本来的顺序就是参数的先后顺序o1、o2; 如果保持这个顺序就返回-1,交换顺序就返回1,什么都不做就返回0; 所以 升序的话 如果o1

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

答:compareTo 是跟什么什么比较的意思,去得出比较结果。 String 直接equals就可以比较了,如果你要比较String内容有哪些相同与不同的话,就String专车鞥char[] 在循环比较。

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...

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里面一个类想用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...

C++ sort函数

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

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

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

Java 怎么用compareTo接口实现排序

答:Collections.sort(list, new Comparator() { public int compare(Object a, Object b) { int one = ((Book)a).getBookId (); int two = ((Book)b).getBookId (); return one- two ; } });

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

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

JavaScript中的sort()函数有不懂疑问,求解!

答:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。 如果想按照其他标准进行排序,就需要提供比较...

C# Array.sort与CompareTo

任何一种排序方法的基本操作其实就是对待排序对象的大小的比较,根据结果进行操作。 因此,类实现IComparable的CompareTo方法,Array.sort给类排序就会调用类里的Com...

Arrays.sort如何与compareTo挂钩

args) { String[] a = "eee,ddd".split(","); Arrays.sort(a, new Comparator() { public int compare(Object o1, Object o2) { return ((String) o1).compareTo((St...

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

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

java里面一个类想用arrays.sort(object a)的方法,必须要实现compare

  @Override    public int compareTo... a, b };        Arrays.sort&...

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

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

JS中使用sort结合localeCompare实现中文排序实例

刚才已经说过sort()方法是按照ASCII码的顺序排序的。 其实sort()方法还允许带一个函数...         return param1.localeCompare(param...

java中sort排序为什么一定要有comparable接口中的compareTo...

不同的 用户 需要不同的排序方式呀, 比如你要 从小到大, 我非得要 从中间到两边的 . 这个排序的方式就是通过 comparable 接口的 compareTo 来定义的.

为什么我不实现IComparable的CompareTo(),调用Array.Sort()就...

Array.sort应该有个IComparable的参数吧 Array.Sort()工作的时候会去调用CompareTo.来比较两个对象的大小

Java中重写了public int compareTo()方法,为什么还是报错 Bou...

绑定不匹配:泛型方法排序(列表< T >)并不适用于argu类型的集合,可以把你的程序贴过来看看

You have to sort of compare what you could be eligible from, fro...

你必须做一定的比对,进而明白到底在你的新配偶身上什么是可选的


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

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

热门图片