JS对象数组的排序(二十二)上

简介: JS对象数组的排序(二十二)

一. JS 数组排序


在JS中,有一个排序方法, sort(), 可以直接 arr.sort(), 进行相应的排序。但这个排序,只是针对的单值,如字符串,数值类型的排序,无法针对JS对象数组进行排序。 需要在sort() 方法中添加相应的排序规则的方法。 接下来,讲解一下 Array 中的sort() 方法。


按照ASCII 的顺序进行排序。


ASCII 码图片:

20190719142351531.png

图片来源于百度百科: https://baike.baidu.com/item/ASCII/309296


二. JS 针对字符串的排序。 (按照ASCII 进行排序)


数组中存放的是单值 字符串形式的。


function validateArrF1(){
  //1.定义字符串的数组。
  var arr=['A','B','a','b','ACD','ACE'];
  //2. 将数组进行排序。 单值的。
  arr.sort();
  //3.输出新的排序后的数组。
  console.log(arr.toString());
}


运行这个方法,结果为:


20190725183530481.png


A的值为65,小a 为97, 按照ASCII 进行排序。


三. JS针对数字的排序


三.一 默认toString() 转换成字符串再排序


数组中存放的是单值 数字形式。


function validateArrF2(){
  //1.定义数字形式的数组。
  var arr=[123,125001,234,234001,100,100001,101101];  //会先将其转换成字符串。
  //2. 将数组进行排序。 单值的。
  arr.sort();
  //3.输出新的排序后的数组。
  console.log(arr.toString());
}


运行,


20190725183542840.png


发现,并没有按照 数字大小的顺序进行排序。 内部是先将数字转换成了字符串 toString(), 然后成为了数字型字符串,按照ASCII 码进行排序。


这样,很明显是不可以的。需要自定义比较器。 (但有时,也会按照这种形式排序,如: 科目的编号, 101为父,101101, 101102, 102,102101,102102 等, 这样排序可以看出父与子之间的关系。 但那时,科目编号本身类型就是字符串)


三.二 自定义比较器,令其按照数字大小进行排序


//定义数字比较的方法。
function compareNum(x,y){
  if(x<y){  //是升序排序。
    return -1;
  }else if(x>y){
    return 1;
  }else{
    return 0;
  }
}
function validateArrF4(){
  //1.定义数字形式的数组。
  var arr=[123,125001,234,234001,100,100001,101101];  //会先将其转换成字符串。
  //2. 将数组进行排序。 sort() 方法里面传入比较的函数,内包。
  arr.sort(compareNum);
  //3.输出新的排序后的数组。
  console.log(arr.toString());
}


在sort() 方法里面放入比较的函数。

展示输出:


20190725183742457.png

四。JS针对数字与字符串混合的排序。


JS数组中,可能既存在数字,也存在字符串,那么这个时候,如何进行排序呢?


function validateArrF3(){
  //1.定义数字形式的数组。
  var arr1=['A','B','a','b','ACD','ACE'];
  var arr2=[123,125001,234,234001,100,100001,101101];  //会按照ASCII 码进行相应的排序。
  var arr=arr1.concat(arr2);
  //2. 将数组进行排序。 单值的。
  arr.sort();
  //3.输出新的排序后的数组。
  console.log(arr.toString());
}


展示输出:


20190725183806419.png


数字会先转换成字符串,然后按照字符串进行相应的排序。 其中,数字0~9 为 48~57, 是在A 65, a97 之前的,所以会先输出数字,再输出字符串。


如果这个时候,在arr.sort() 里面放入 数字排序的方法呢?


arr.sort(compareNum);


显示效果如下:


20190725183824801.png


这个时候,很奇怪,为什么是这样的呢?


其实,A 字符是可以转换成 数字的, 是65, a是字符,也可以转换,转换成 97. 变成了数字。 字符串只取其中的第一个字符进行比较,如果相同,才比较第二个。

相关文章
|
6月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
6月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
6月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
6月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
11月前
|
前端开发 JavaScript 算法
使用 JavaScript 数组方法实现排序与去重
【10月更文挑战第21天】通过灵活运用 `sort()` 方法和 `filter()` 方法,我们可以方便地实现数组的排序和去重。同时,深入理解排序和去重的原理,以及根据实际需求进行适当的优化,能够更好地应对不同的情况。可以通过实际的项目实践来进一步掌握这些技巧,并探索更多的应用可能性。
310 59
|
11月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
186 2
|
11月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
323 3
|
11月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
273 4
|
11月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
157 1
|
11月前
|
JavaScript 前端开发 API
JS中数组的方法flat()怎么用
JS中数组的方法flat()怎么用
173 0