在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同。在javascript中,也有一些精妙的算法,用来对一些对象进行排序。我在面试迅雷的时候,也拿到一道题,当时做题的时候考虑到时间,没有去仔细研究,回来后再读了一些方法,就知道真正的考点在哪里了。

我们现在有一组“学生”对象,包含“名字,年龄”等属性,现在要求一个算法,把这些对象放在一个数组里,可以实现按照年龄对这些对象进行排序。

var sdts = [{name:"小明",age:12},{name:"小红",age:13},{name:"小花",age:11}
]

那么考点在哪里呢?实际上在于数组对象的sort方法。

Array.sort(fun)

fun是一个函数,排序根据这个函数返回值来进行判断,如果返回值小于0表示两个元素不需要交换位置,1表示要用交互位置,0表示相等,实际上<=0等效。

sort方法有两个注意点:

  1. 会操作原始数组,经过操作后原始数组发生变化
  2. 默认排序按照字符编码排序,例如,我们有下面的一个例子:
var arr1 = [14,23,11,6,87,67];
arr1.sort();// [11,14,23,6,67,87] 按字符而非数值排序

想要完成值比较排序,必须传入sort参数(函数)进行规制制定:

function sortRule(a,b) {return a-b; // 如果a>=b,返回自然数,不用交换位置
}
arr1.sort(sortRule);

但是,如果遇到我们上面题目中一样,每个元素并非是数组,而是对象,那应该怎么去处理呢?其实道理是一样的,只不过我们要在规制函数中重新编写一个适合对象的规制:

functon sortRule(a,b) {return a.age - b.age;
}

当然,这样写会遇到一些问题,这是我们在明确知道要进行排序的对象数组的情况,倘若对象数组元素不存在age属性,那就会报错了,因此,你在撰写自己的规则时,应该更加丰富它的规则判断。

加入我们现在不规定按照哪一个属性排序,比如除了age属性,我们还有学生的分数score属性,我们偶尔需要按照年龄排序,偶尔又需要按照score排序,希望能重复用这个算法,应该怎么办呢?

function sortBy(field) {return function(a,b) {return a[field] - b[field];}
}
arr1.sort(sortBy("score"));

没错,核心的代码就这么简单了,一些可能抛出错误的判断,自己去考虑吧。在这种想法下面,我们还可以做一个设想:假如score相等的情况下,我们是否可以按照年龄的大小排序输出?

function sortBy(field1,field2) {return function(a,b) {if(a.field1 == b.field1) return a.field2 - b.field2;return a.field1 - b.field1;}
}
arr1.sort(sortBy("score","age"));

没错,其实也就这么简单,你甚至可以使用argments来获取更多的参数,用以传入更多的字段作为判断条件。

转载来自:http://www.tangshuang.net/2406.html

javascript中对一个对象数组按照对象某个属性进行排序相关推荐

  1. android json字符串转成json对象_在PHP中处理JSON数组以及对象

    php中文网最新课程 每日17点准时技术干货分享 在 PHP 中处理 JSON 数组以及对象 与客户端混淆的常见原因是围绕 JSON 数组和对象,以及如何在 PHP 中指定他们.特别是,问题是由空对象 ...

  2. 根据数组中对象的属性值排序倒叙

    数组中对象的属性值排序倒叙demo function compare(e) {return function (a, b) {var value1 = a[e];var value2 = b[e];r ...

  3. 如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异

    LeetCode今天面临的挑战是在数组中查找所有消失的数字. 蛮力 我们的输入包括一个缺少数字的实际数组.我们想将该数组与相同长度的数组进行比较,其中没有遗漏的数字.所以如果给定的话[4,3,2,7, ...

  4. 如何在JavaScript中获取字符串数组的字符串?

    本文翻译自:How do you get a string to a character array in JavaScript? How do you get a string to a chara ...

  5. 小程序 | 小程序中常用的事件 + 事件对象的属性列表 +小程序事件传参 + 小程序全局配置 + 小程序页面配置 + 小程序发起网络数据请求

    文章目录 一.WXML 模板语法 数据绑定 事件绑定 ⭐小程序中常用的事件 ⭐事件对象的属性列表 target 和 currentTarget 的区别 bindtap 的语法格式 在事件处理函数中为 ...

  6. js reduce 累加数组里对象某个属性的和 NaN

    js reduce 累加数组里对象某个属性的和 NaN var temp = [ { "y": 32 }, { "y": 60 }, { "y&quo ...

  7. UserControl 中包含封装了集合对象的属性被设计器自动初始化所引起的错误!也有关于List的问题

    在CSDN上看到了一篇关于UserControl引起的问题,去重现了一下,并进行了一些小结. 自定义 UserControl 中包含封装了 List <接口> 类型字段的属性,编译后造成引 ...

  8. JavaScript系列学习笔记2 —— 数组Array对象

    目录 一.概念与作用 二.基本结构 2.1 数组构造函数 2.2 数组字面量表示法 三.Array对象的属性和方法 3.1 Array对象的属性 3.2 Array对象的方法 四.数组元素的访问和存储 ...

  9. 在JavaScript中逐个遍历数组?

    如何使用JavaScript遍历数组中的所有条目? 我以为是这样的: forEach(instance in theArray) 其中theArray是我的数组,但这似乎是不正确的. #1楼 如果您不 ...

最新文章

  1. Linux网络编程——I/O复用函数之epoll
  2. python需要学多长时间
  3. Android 入门篇(一)环境搭建
  4. CPU,内存, 硬盘,指令之间的关系
  5. nvm装node npm
  6. SQL Server2012内存性能计数器和内存DMV的变化
  7. docker安装elasticsearch教程
  8. ESP8266 WIFI模块开发入门1 开发环境搭建
  9. 百度地图api 刷新地图_百度地图VS高德地图,谁更胜一筹?
  10. RK3399外设驱动之PWM驱动:红外驱动
  11. 巴菲特致股东的信pdf_股神巴菲特发布致股东公开信,接班人仍是个谜
  12. 昔日无痕,沧桑有迹-魔幻般的2020
  13. 《数据结构》-树(双亲表示法)
  14. IGRP和EIGRP 详解
  15. 简析NFT交易平台的发展历程及4F评估模型
  16. PHP代码审计DVWA[XSS (Reflected)]
  17. HtmlCSS 基础知识
  18. scipy csr_matrix和csc_matrix函数详解
  19. 计算机模拟分子药物设计书籍,计算机分子模拟技术在药物设计中的应用
  20. 三体归零者和盘龙鸿蒙,三体中绝大多数的文明都害怕黑暗森林,为什么只有归零者不惧怕?...

热门文章

  1. [html] html6即将到来,你最期待的是什么特性呢?
  2. 前端学习(2865):公开课封装组件库介绍
  3. 工作134:custom组件
  4. 前端学习(1559):ng-classt隔行变色
  5. 第一百二十三期:免费在线制图神器!不上水印支持中文版,GitHub标星已破1万2
  6. spring学习(33):id和name
  7. 玩转oracle 11g(28):ora-00064和程序异常终止
  8. mysql(1):修改数据库密码
  9. linux mysql数据库定时备份
  10. JavaScript 监听手机端的touch滑动事件(滑动手势)