javaScript中自定义sort中的比较函数,用于比较字符串长度,数值大小

合集下载

js sort原理

js sort原理

js sort原理一、概述JavaScript中的sort()方法是用于对数组进行排序的,它可以按照指定的排序规则对数组元素进行排序。

sort()方法是JavaScript内置的方法,不需要额外引入其他库或插件。

二、语法sort()方法没有参数,直接在数组对象上调用即可。

三、排序规则sort()方法默认按照字符串Unicode码点进行排序,例如[11, 2, 21]会被排序为[11, 2, 21]。

因此,如果要按照数字大小进行排序,则需要传入比较函数。

四、比较函数比较函数是一个可以接受两个参数的函数,通常被称为a和b。

该函数应该返回一个负数、零或正数,表明a是否应该排在b之前。

如果返回值小于0,则表示a应该排在b之前;如果返回值等于0,则表示a和b相等;如果返回值大于0,则表示a应该排在b之后。

五、示例代码以下是一个基本的示例代码:```var arr = [11, 2, 21];arr.sort(function(a, b) {return a - b;});console.log(arr); // [2, 11, 21]```六、原理分析sort()方法使用一种称为快速排序(QuickSort)的算法来对数组进行排序。

快速排序是一种分治算法,它将原始数据集合分成两个子集合,其中一个子集合的所有元素都比另一个子集合的元素小,然后递归地对两个子集合进行排序。

快速排序的基本思路是选取一个基准元素,然后将数组分成两个部分,一部分是所有比基准元素小的元素,另一部分是所有比基准元素大的元素。

然后再对这两部分继续进行快速排序,直到数组有序为止。

sort()方法默认使用Unicode码点进行排序,但是可以通过传入比较函数来指定排序规则。

在比较函数中,通常会使用a和b作为参数名,并返回a-b或b-a来实现升序或降序排列。

七、优化虽然快速排序在大多数情况下都表现良好,但是当数据量非常大时可能会出现性能问题。

为了避免这种情况,可以使用一些优化技巧:1. 插入排序:当数据量小于某个阈值时(通常为10),可以切换到插入排序。

js中sort方法

js中sort方法

js中sort方法JavaScript中的sort()方法是一个非常有用的数组方法,它用于对数组元素进行排序。

sort()方法可以按照指定的排序顺序对数组进行排序,也可以根据默认的排序顺序对数组进行排序。

sort()方法的基本语法如下所示:arr.sort([compareFunction])其中,arr是要排序的数组,compareFunction是一个可选的函数参数,用于指定排序的顺序。

如果不传递compareFunction参数,sort()方法会将数组元素转换为字符串,并按照Unicode编码进行排序。

这种默认的排序方式在处理数字时可能会出现问题,因为它会将数字转换为字符串进行比较。

为了解决这个问题,我们可以通过传递一个compareFunction函数来指定排序顺序。

compareFunction函数接收两个参数,通常被称为a和b,表示要进行比较的两个元素。

如果compareFunction 返回一个小于0的值,那么a将排在b的前面;如果compareFunction返回一个大于0的值,那么b将排在a的前面;如果compareFunction返回0,那么a和b的相对位置不变。

下面是一个简单的示例,演示了如何使用sort()方法对数组进行排序:```javascriptconst fruits = ['apple', 'orange', 'banana', 'kiwi'];fruits.sort();console.log(fruits);// 输出:['apple', 'banana', 'kiwi', 'orange']```在这个例子中,我们创建了一个包含水果名称的数组fruits。

然后,我们调用sort()方法对数组进行排序。

由于我们没有传递compareFunction参数,sort()方法会将数组元素转换为字符串,并按照Unicode编码进行排序。

js的sort排序方法

js的sort排序方法

js的sort排序方法JS的sort排序方法在JavaScript中,sort()方法是一个非常常用的排序方法,用于对数组中的元素进行排序。

sort()方法可以按照指定的排序规则对数组进行排序,从而使数组中的元素按照特定的顺序排列。

sort()方法可以接受一个可选的参数,该参数是一个比较函数。

通过该比较函数,我们可以自定义排序规则。

比较函数接受两个参数,分别表示待比较的两个元素。

根据比较函数的返回值,sort()方法在排序时决定元素的位置。

下面我们来看一个简单的例子,对一个数组进行升序排序:```javascriptvar arr = [5, 8, 2, 1, 10];arr.sort(function(a, b) {return a - b;});console.log(arr); // 输出 [1, 2, 5, 8, 10]```在这个例子中,我们传入了一个比较函数,该函数返回值为a - b。

当返回值小于0时,表示a应该排在b的前面;当返回值大于0时,表示a应该排在b的后面;当返回值等于0时,表示a和b的相对位置不变。

通过这种方式,我们可以实现升序排序。

除了升序排序,sort()方法还可以实现降序排序。

只需要将比较函数的返回值改为b - a即可。

下面是一个降序排序的例子:```javascriptvar arr = [5, 8, 2, 1, 10];arr.sort(function(a, b) {return b - a;});console.log(arr); // 输出 [10, 8, 5, 2, 1]```在这个例子中,我们将比较函数的返回值改为b - a,实现了降序排序。

除了数字类型的排序,sort()方法还可以用于字符串类型的排序。

在字符串排序时,sort()方法默认按照字母的Unicode编码进行排序。

下面是一个字符串排序的例子:```javascriptvar arr = ['apple', 'banana', 'cherry', 'date'];arr.sort();console.log(arr); // 输出 ['apple', 'banana', 'cherry', 'date']```在这个例子中,我们没有传入比较函数,sort()方法默认按照字母的Unicode编码进行排序。

sort排序函数

sort排序函数

sort排序函数
sort是一种排序函数,可以按照某种顺序对数组进行排序。

在JavaScript中,sort函数可以用于对数组进行排序,支持对数字、字符串以及自定义的对象进行排序。

使用sort函数时,需要传入一个比较函数,以指定排序的顺序。

比较函数应该返回一个数,表示两个输入值的大小关系。

如果返回一个小于0的数,表示第一个输入值应该排在第二个输入值之前;如果返回一个大于0的数,表示第一个输入值应该排在第二个输入值之后;如果返回0,表示两个值相等,顺序可以任意。

例如,对于一个数字数组,可以使用以下比较函数进行排序:
javascript
const nums = [5, 3, 9, 1, 8];
nums.sort((a, b) => a - b); 小到大排序
对于一个字符串数组,可以使用以下比较函数进行排序:
javascript
const strs = ['apple', 'banana', 'cherry', 'orange'];
strs.sort((a, b) => a.localeCompare(b)); 按字母顺序排序
对于一个自定义的对象数组,可以按照对象的某个属性进行排序,例如:
javascript
const objs = [{name: 'Tom', age: 18}, {name: 'Jerry', age: 20}, {name: 'Alice', age: 19}];
objs.sort((a, b) => a.age - b.age); 按年龄排序。

Js数组排序函数:sort()

Js数组排序函数:sort()

Js数组排序函数:sort()js原⽣的 sort() 排序函数使⽤起来很⽅便语法:arrayObject.sort(fun) 数组对象.sort(排序函数)如果调⽤该⽅法时没有使⽤参数,将按照字符编码的顺序进⾏排序。

也可以提供⼀个⽐较函数作为参数,实现⼤⼩的排序。

例⼀:对数值型元素的数组进⾏⼤⼩排序[html]1. //定义⼀个⽐较函数2. //升序排序3. function NumAscSort(a,b)4. {5. return a - b;6. }7.8. //降序排序9. function NumDescSort(a,b)10. {11. return b - a;12. }13.14. //定义数组15. var arr = new Array( 10, 30, 15, 45, 8);16.17. //对数组进⾏升序排序18. arr.sort(NumAscSort);19. alert(arr);20.21. //对数组进⾏降序排序22. arr.sort(NumDescSort);23. alert(arr);例⼆:对字符串类型元素数组进⾏排序[html]1. //当调⽤sort函数没有给予参数时,默认根据字符编码的顺序进⾏排序2. var arr = ["Apple", "Banana", "Orange"];3. arr.sort();4. alert(arr);例三:对象数组排序[html]1. //定义compare函数,参数name是对象的某⼀个属性,⽐如age、salary2. //返回⼀个可以⽤来对包含该成员的对象数组进⾏排序的⽐较函数3. var compare = function(name){4. return function(o, p){5. var a, b;6. if (typeof o === "object" && typeof p === "object" && o && p) {7. a = o[name];8. b = p[name];9. if (a === b) {10. return 0;11. }12. if (typeof a === typeof b) {13. return a < b ? -1 : 1;14. }15. return typeof a < typeof b ? -1 : 1;16. }17. else {18. throw ("error");19. }20. }21. }22.23.24. //定义员⼯对象数组25. var emp=[];26. emp[0]={name:"xiaoming", age:32, salary:11000};27. emp[1]={name:"xiaohong", age:17, salary:23000};28. emp[2]={name:"dahuang", age:58, salary:9000};29. emp[3]={name:"dajiji", age:62, salary:15000};30. <span style="white-space:pre"> </span>31. <span style="white-space:pre"> </span>32. //排序33. emp.sort(compare("age"));34. <span style="white-space:pre"> </span>35. for(var i = 0;i<emp.length; i++){36. alert(emp[i].age)37. }例四:根据多个属性对 ‘对象数组’ 进⾏排序[html]1. //定义compare函数,name是对象的某⼀个属性,fun是⼀个⽐较函数2. var compare = function(name,fun){3. return function(o,p){4. var a,b;5. if(o && p && typeof o === 'object' && typeof p ==='object'){6. a = o[name];7. b = p[name];8. //当o[name] 和 p[name] 相等时,利⽤fun函数根据另⼀个属性来进⾏⽐较9. if(a === b){10. return typeof minor === 'function' ? fun(o,p):0;11. }12. if(typeof a === typeof b){13. return a < b ? -1:1;14. }15. return typeof a < typeof b ? -1 : 1;16. }else{17. thro("error");18. }19. }20. }21.22. //定义员⼯对象数组23. var emp=[];24. emp[0]={name:"xiaoming", age:32, salary:11000};25. emp[1]={name:"xiaohong", age:62, salary:23000};26. emp[2]={name:"dahuang", age:58, salary:9000};27. emp[3]={name:"dajiji", age:62, salary:15000};28.29.30. //先根据age排序,age相等时,根据⼯资排序31. emp.sort(compare('age',compare('salary')));32. <span style="white-space:pre"> </span>33. for(var i = 0;i<emp.length; i++){34. <span style="white-space:pre"> </span>alert(emp[i].name)35. }⽂末福利:福利⼆:微信⼩程序⼊门与实战全套详细视频教程【领取⽅法】关注 【编程微刊】微信公众号:回复【⼩程序demo】⼀键领取130个微信⼩程序源码demo资源。

javascript的字符串大小比较

javascript的字符串大小比较

javascript的字符串⼤⼩⽐较javascript的字符串⼤⼩⽐较是按照字符串中对应的字符在编码表(UTF-16)中的数值的⼤⼩来进⾏⽐较的,⽐如'abcd'和'abaa'进⾏⽐较,先⽐较第⼀个字符,发现他们都是a⼤⼩⼀样,然后就会⽐较第⼆个发现都是b,然后⽐较第三个字符c的编码⼤于a,⽐较出了⼤⼩,所以字符串abcd⼤于字符串abaa。

字符串的前缀不会⼤于⾃⼰,'abcdefe' > 'abc'结果为true。

对中⽂的⽐较也是同样的规则,⽐如你好和你们进⾏⽐较也是⽐较字符在编码表中的数值⼤⼩进⾏的,如下'你好' > '你们'。

⾸先⽐较第⼀个字符,发现'你'⼤⼩相同,因为'你'.charCodeAt(0)等于你'.charCodeAt(0)'等于20320,然后⽐较第⼆个字符'好'和'们','好'的编码值为22909,'们'的编码值为20204,所以'好'⼤于'们'。

所以最后'你好'是⼤于'你们'的'好'.charCodeAt(0) -> 22909'们'.charCodeAt(0) -> 202041. Else, both px and py are Strings1. If py is a prefix of px, return false. (A String value p is a prefix of String value q if q can be the result ofconcatenating p and some other String r. Note that any String is a prefix of itself, because r may be the empty String.)2. If px is a prefix of py, return true.3. Let k be the smallest nonnegative integer such that the character at position k within px is different from the character atposition k within py. (There must be such a k, for neither String is a prefix of the other.)4. Let m be the integer that is the code unit value for the character at position k within px.5. Let n be the integer that is the code unit value for the character at position k within py.6. If m < n, return true. Otherwise, return false.NOTE 1Step 3 differs from step 7 in the algorithm for the addition operator + () in using and instead of or.NOTE 2The comparison of Strings uses a simple lexicographic ordering on sequences of code unit values. There is no attempt to use the more complex, semantically oriented definitions of character or string equality and collating order defined in the Unicode specification. Therefore String values that are canonically equal according to the Unicode standard could test as unequal. In effect this algorithm assumes that both Strings are already in normalised form. Also, note that for strings containing supplementary characters, lexicographic ordering on sequences of UTF-16 code unit values differs from that on sequences of code point values.参考。

js sort底层原理

js sort底层原理

js sort底层原理一、引言JavaScript中的sort()函数是用于对数组进行排序的一种常见方法。

虽然大多数开发者对其功能有所了解,但可能并不清楚其背后具体的实现原理。

本文将深入探讨JavaScript sort()函数的底层原理,包括其工作机制、性能优化以及如何自定义排序逻辑。

二、sort()函数的工作原理sort()函数按照从小到大的顺序对数组的元素进行排序。

在JavaScript中,sort()函数会创建一个新的数组,该数组包含按指定顺序排列的原始数组的副本。

该函数使用一个比较函数来确定元素的顺序。

比较函数接受两个参数,如果第一个参数小于第二个参数,则返回一个负数;如果两个参数相等,则返回0;如果第一个参数大于第二个参数,则返回一个正数。

三、内部实现机制JavaScript的sort()函数实际上是由引擎的内部实现决定的,它依赖于操作系统的内部算法。

在V8引擎中,sort()函数使用一个称为Timsort的算法,这是一种平衡的排序算法,适用于处理大量数据。

Timsort算法通过合并插入和选择步骤来工作,从而在平均情况下提供良好的性能。

四、性能优化JavaScript引擎通过一些技巧来优化sort()函数的性能。

首先,sort()函数使用了合并排序的思想,即将数组分成较小的部分进行排序,然后将有序的部分合并成最终的排序结果。

其次,引擎使用了缓存来存储已经排序好的数组,以避免重复排序相同的数组。

这些优化策略使得sort()函数在处理大型数据集时能够提供良好的性能。

五、自定义排序逻辑sort()函数允许开发者提供自定义的比较函数,以实现自定义的排序逻辑。

比较函数可以根据需要选择不同的排序准则,如根据字符串的字典顺序、数值的大小、对象的属性顺序等。

通过使用比较函数,开发者可以更好地控制数据的排序方式,从而实现更加灵活的排序需求。

六、结论了解JavaScript sort()函数的底层原理对于提高代码性能和实现自定义排序逻辑具有重要意义。

javascript中数组比较大小方法

javascript中数组比较大小方法

javascript中数组⽐较⼤⼩⽅法javascript中数组取最⼤值和最⼩值1、排序法我们给数组进⾏排序,可以按照从⼩到⼤的顺序来排,排序之后的数组中第⼀个和最后⼀个就是我们想要获取的最⼩值和最⼤值。

排序我们会⽤到数组的 sort ⽅法。

var arr = [12,56,25,5,82,51,22];arr.sort(function (a, b) {return a-b;}); // [5,12,22,25,51,56]var min = arr[0]; // 5var max = arr[arr.length - 1]; // 562.假设法假设当前数组中的第⼀个值是最⼤值,然后拿这个最⼤值和后⾯的项逐⼀⽐较,如果后⾯的某⼀个值⽐假设的值还⼤,说明假设错了,我们把假设的值进⾏替换。

最后得到的结果就是我们想要的。

// 获取最⼤值:var arr = [22,13,6,55,30];var max = arr[0];for(var i = 1; i < arr.length; i++) {var cur = arr[i];cur > max ? max = cur : null}console.log(max); // 55// 获取最⼩值:var arr = [22,13,6,55,30];var min = arr[0];for(var i = 1; i < arr.length; i++) {var cur = arr[i];cur < min ? min = cur : null}console.log(min) // 63. 使⽤ Math 中的 max/min ⽅法可以使⽤apply来实现。

apply传⼊的是⼀个数组。

var arr = [22,13,6,55,30];var max = Math.max.apply(null, arr);var min = Math.min.apply(null, arr);console.log(max, min) // 55,64、使⽤ES6的扩展运算符//ES5 取数组最⼤值console.log(Math.max.apply(this, [654, 233, 727]));//ES6 扩展运算符console.log(Math.max(...[654, 233, 727]))//相当于console.log(Math.max(654, 233, 727))排序对象数组// ⽐较年份var cars = [{type:"Volvo", year:2016},{type:"Saab", year:2001},{type:"BMW", year:2010}];cars.sort(function(a, b){return a.year - b.year});//⽐较字符串cars.sort(function(a, b){var x = a.type.toLowerCase();var y = b.type.toLowerCase();if (x < y) {return -1;}if (x > y) {return 1;}return 0;});以随机顺序排序数组var points = [40, 100, 1, 5, 25, 10];points.sort(function(a, b){return 0.5 - Math.random()});。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文由我司收集整编,推荐下载,如有疑问,请与我司联系javaScript 中自定义sort 中的比较函数,用于比较字符串长度,数值大

2017/07/30 0
var arr = [‘aa’, 23, 1.2, ‘bb’,‘cc’];var len = arr.length;// for (var i = 0; i len; i++) {// alert(arr + “数组的长度是:“+ arr.length + “这一次队首的元素是:”+ arr.shift());// }// alert(“重排数组后:“+ arr.reverse());// alert(“数组排序后:“+ arr.sort());var arr = [1, 4, 6, 9, 10, 21];//初级版本的比较数值大小function compareBig(num1, num2) { if (num1 num2) { return -1; } else if (num1 == num2) { return 0; } else { return 1; }}//当被比较的两个数,可以被转换为数值时,可以简化gai 方法function compareBigger(num1, num2) { return num1 - num2;}var strArr = [‘a’,‘aaaaa’,‘aa’,‘124’,‘0sjssd’];function compareLen(str1, str2) { if (str1.length str2.length) { return - 1; } else if (str1.length str2.length) { return 0; } else { return 1; }//比较数组元素为对象时,我们怎么处理呢?}alert(arr + “排序后的数组是:“+
arr.sort(compareBig));alert(strArr + “排序后的数组是:“ + strArr.sort(compareLen));//
函数嵌套,上面两种函数,自己好好体会function
creatCompareFunction(propertyName) { return function(object1, object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value1 value2) { return - 1; } else if (value1 value2) { return 1; } else { return 0; } }}var data = [{ name: ‘dd’, age: 2 }, { name: ‘bb’,age: 31 }, { name: ‘cc’,age:
1 }];data.sort(creatCompareFunction(‘name’));alert(data[0].name);
tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

相关文档
最新文档