javascript中对一个对象数组按照对象某个属性进行排序
在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同。在javascript中,也有一些精妙的算法,用来对一些对象进行排序。我在面试迅雷的时候,也拿到一道题,当时做题的时候考虑到时间,没有去仔细研究,回来后再读了一些方法,就知道真正的考点在哪里了。
我们现在有一组“学生”对象,包含“名字,年龄”等属性,现在要求一个算法,把这些对象放在一个数组里,可以实现按照年龄对这些对象进行排序。
var sdts = [{name:"小明",age:12},{name:"小红",age:13},{name:"小花",age:11} ]
那么考点在哪里呢?实际上在于数组对象的sort方法。
Array.sort(fun)
fun是一个函数,排序根据这个函数返回值来进行判断,如果返回值小于0表示两个元素不需要交换位置,1表示要用交互位置,0表示相等,实际上<=0等效。
sort方法有两个注意点:
- 会操作原始数组,经过操作后原始数组发生变化
- 默认排序按照字符编码排序,例如,我们有下面的一个例子:
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中对一个对象数组按照对象某个属性进行排序相关推荐
- android json字符串转成json对象_在PHP中处理JSON数组以及对象
php中文网最新课程 每日17点准时技术干货分享 在 PHP 中处理 JSON 数组以及对象 与客户端混淆的常见原因是围绕 JSON 数组和对象,以及如何在 PHP 中指定他们.特别是,问题是由空对象 ...
- 根据数组中对象的属性值排序倒叙
数组中对象的属性值排序倒叙demo function compare(e) {return function (a, b) {var value1 = a[e];var value2 = b[e];r ...
- 如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异
LeetCode今天面临的挑战是在数组中查找所有消失的数字. 蛮力 我们的输入包括一个缺少数字的实际数组.我们想将该数组与相同长度的数组进行比较,其中没有遗漏的数字.所以如果给定的话[4,3,2,7, ...
- 如何在JavaScript中获取字符串数组的字符串?
本文翻译自:How do you get a string to a character array in JavaScript? How do you get a string to a chara ...
- 小程序 | 小程序中常用的事件 + 事件对象的属性列表 +小程序事件传参 + 小程序全局配置 + 小程序页面配置 + 小程序发起网络数据请求
文章目录 一.WXML 模板语法 数据绑定 事件绑定 ⭐小程序中常用的事件 ⭐事件对象的属性列表 target 和 currentTarget 的区别 bindtap 的语法格式 在事件处理函数中为 ...
- js reduce 累加数组里对象某个属性的和 NaN
js reduce 累加数组里对象某个属性的和 NaN var temp = [ { "y": 32 }, { "y": 60 }, { "y&quo ...
- UserControl 中包含封装了集合对象的属性被设计器自动初始化所引起的错误!也有关于List的问题
在CSDN上看到了一篇关于UserControl引起的问题,去重现了一下,并进行了一些小结. 自定义 UserControl 中包含封装了 List <接口> 类型字段的属性,编译后造成引 ...
- JavaScript系列学习笔记2 —— 数组Array对象
目录 一.概念与作用 二.基本结构 2.1 数组构造函数 2.2 数组字面量表示法 三.Array对象的属性和方法 3.1 Array对象的属性 3.2 Array对象的方法 四.数组元素的访问和存储 ...
- 在JavaScript中逐个遍历数组?
如何使用JavaScript遍历数组中的所有条目? 我以为是这样的: forEach(instance in theArray) 其中theArray是我的数组,但这似乎是不正确的. #1楼 如果您不 ...
最新文章
- Linux网络编程——I/O复用函数之epoll
- python需要学多长时间
- Android 入门篇(一)环境搭建
- CPU,内存, 硬盘,指令之间的关系
- nvm装node npm
- SQL Server2012内存性能计数器和内存DMV的变化
- docker安装elasticsearch教程
- ESP8266 WIFI模块开发入门1 开发环境搭建
- 百度地图api 刷新地图_百度地图VS高德地图,谁更胜一筹?
- RK3399外设驱动之PWM驱动:红外驱动
- 巴菲特致股东的信pdf_股神巴菲特发布致股东公开信,接班人仍是个谜
- 昔日无痕,沧桑有迹-魔幻般的2020
- 《数据结构》-树(双亲表示法)
- IGRP和EIGRP 详解
- 简析NFT交易平台的发展历程及4F评估模型
- PHP代码审计DVWA[XSS (Reflected)]
- HtmlCSS 基础知识
- scipy csr_matrix和csc_matrix函数详解
- 计算机模拟分子药物设计书籍,计算机分子模拟技术在药物设计中的应用
- 三体归零者和盘龙鸿蒙,三体中绝大多数的文明都害怕黑暗森林,为什么只有归零者不惧怕?...