js对象数组多字段排序
来源:js对象数组按照多个字段进行排序
一、数组排序
Array.sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序。
一般用法:(数组元素从小大进行排序)
var a = [9, 6, 5, 7, 11, 52, 15];
a.sort((a, b) => a-b)
// (7) [5, 6, 7, 9, 11, 15, 52]
sort()方法,接收了一个函数作为参数时,排序主要根据传入函数的返回值是否大于0进行排序。
1)当 a - b < 0 时, 则 a 元素排在 b 元素的前面。
2)当 a - b = 0 时, a , b 元素的位置不变。
3)当 a - b > 0 是, 则 a 元素排在 b 元素的后面。
以上是针对单纯的整数数组,但是需求往往肯定不会是这么简单。所以如果当数组的元素为对象时,则可能需要根据对象的属性进行排序,此时就会涉及到多条件排序。
二、数组对象多条件排序
如数组中的元素是obj对象,此时需要根据, age、id、name三个维度对数组进行排序。
需求如下:age小的排前面,其次 id 小的排前面,其次name小的排在前面
// 先按age排序,age相同再按id排序,id相同则再按name排序
function mysort(a,b){
if (a.age !== b.age) return a.age < b.age ? -1 : 1
else if (a.id !== b.id) return a.id < b.id ? -1 : 1
else if (a.name !== b.name) return a.name < b.name ? -1 : 1
}
let arr = [
{name:12,age:10,id:2001},
{name:10,age:10,id:2010},
{name:15,age:24,id:2008},
{name:13,age:10,id:2008},
{name:8,age:10,id:2001},
{name:18,age:24,id:2000},
{name:16,age:26,id:20015},
{name:6,age:10,id:2001},
{name:14,age:10,id:2000},
]
arr.sort(mysort)

js对象数组多字段排序的更多相关文章
- js对象按某个字段排序
var arr = [ {name:'zopp',age:0}, {name:'gpp',age:18}, {name:'yjj',age:8} ]; function compare(propert ...
- JS对象—数组总结(创建、属性、方法)
JS对象—数组总结(创建.属性.方法) 1.创建字符串 1.1 new Array() var arr1 = new Array(); var arr2 = new Array(6); 数组的长度为6 ...
- 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>
前台的js对象数组传到后台处理.在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>
- iOS--自定义相册---对象数组按照时间戳排序
将对象按照时间戳排序,这里典型的一个例子是登录账户的排序:本地客户端可能保存了多个账户信息,在登录窗口用户可以选择已经登陆过的账户直接登录,现在的需求是要时刻让最近登陆过的账户排在前面,对于每个账户, ...
- js对象数组中的某属性值 拼接成字符串
js对象数组中的某属性值 拼接成字符串 var objs=[ {id:1,name:'张三'}, {id:2,name:'李四'}, {id:3,name:'王五'}, {id:4,name:'赵六' ...
- js对象数组深度去重和深度排序
使用collect.js处理数组和对象 https://github.com/ecrmnn/collect.js/# 引入collect.js https://github.com/ecrmnn/co ...
- JS中json数组多字段排序方法(解决兼容性问题)(转)
前端对一个json数组进行排序,用户需要动态的根据自己的选择来对json数据进行排序. 由于后台表设计问题所以不能用sql进行排序,这里用到了js的sort方法. 如果对单字段排序,那么很简单,一个s ...
- js对象,数组,字符串的操作
循环绑定=>变量污染 for (var i = 0;i<lis.length;i++){ lis[i].index = i;#给页面元素对象添加一个任意属性(保留索引的属性index) # ...
- js对象/数组深度复制
今天碰到个问题,js对象.数组深度复制:之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下: function clone(obj) { var a; if(obj instanceo ...
随机推荐
- LVS配置记录
目录: 一.NAT模式配置 二.DR模式配置 三.TUN模式配置 LVS原理及架构不再赘述. 一.NAT模式 部署环境 注意: 1) DIP.RIP必须为同网段: 2) RS网关必须指向DS: 3) ...
- C#深入理解多态
1.里氏替换原则 1.里氏替换原则:在一个软件系统中,如果子类出现在父类出现的位置,而整个软件功能又没有影响,那么咱们称为里氏替换. 2. 考试题:父类变量指向子类对象!! 3.里氏替换 是 ...
- Python语法入门之与用户交互、运算符
一.与用户交互 输入 获取用户输入 username = input('请输入您的用户名>>>:') '''将input获取到的用户输入绑定给变量名username''' print ...
- 混沌映射初始化种群之Logistic映射
Logstic混沌映射初始化种群 Step 1: 随机生成一个\(d\)维向量\({X_0}\),向量的每个分量在0-1之间. Step 2: 利用Logistic映射生成N个向量.L ...
- Vue2与Vue3的组件通讯对比
Vue2 父传子 父传子比较简单, 主要通过以下步骤实现 父在template中为子绑定属性 <Child :childData='pMsg'/> <!-- 也可以写死 --> ...
- CF999C Alphabetic Removals 题解
Content 给定一个长度为 \(n\) 的仅含小写字母的字符串,执行 \(k\) 次如下操作: 如果字符串中有 a 这个字母,删除从左往右第一个 a,并结束操作,否则继续操作: 如果字符串中有 b ...
- shell 文件读取批量处理
cat ./redis-keys.txt | while read myline do echo ${myline} /usr/local/bin/redis-cli -h 000.00.00.000 ...
- xfs文件系统修复方法https://blog.csdn.net/yuanfang_way/article/details/78700089
首先尝试mount和umount文件系统,以便重放日志,修复文件系统,如果不行,再进行如下操作. 1.检查文件系统:先确保umount xfs_check /dev/sdd(盘符); echo $? ...
- 反解ios静态库
p.p1 { margin: 0; font: 12px "Helvetica Neue" } p.p2 { margin: 0; font: 12px "Helveti ...
- 【LeetCode】485. Max Consecutive Ones 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 [LeetCo ...