JS中对象数组按照对象的某个属性进行排序_js对象数组按照某个属性排序-程序员宅基地

技术标签: java  javascript  开发语言  

目录

一、总结

一句话总结:

js中的数组中的对象排序很简单,根据对象的属性指定排序规则即可,如果出问题就仔细检查一下中间数据

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

1、sort的排序函数中,规定属性进行排序?

可以在原数组排序函数的基础上再套一个函数来传字段参数,原排序函数作为这个函数的返回值返回

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

2、字段1相等的时候,按照字段2的规则排序?

直接在规则中写字段1相等时字段2怎样,字段1不相等时怎样

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("value","score"));

回到顶部

二、JS中对于对象数组按照对象的某个属性进行排序

转自或参考:JS中对于对象数组按照对象的某个属性进行排序
https://www.cnblogs.com/iamlhr/p/11459653.html">JS中对于对象数组按照对象的某个属性进行排序

1.对象数组

我们现在有一组对象,包含“name,value”等属性,实现按照value对这些对象进行排序。

series:[
   {name:'西安市',value:100},
   {name:'威阳市',value:120},
   {name:'延安市',value:80},
   {name:'南洛市',value:90},
   {name:'榆林市',value:130}
]

2.排序方法

实际上在于数组对象的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.value- b.value;
}

当然,这样写只使用对象的value属性,这是我们在明确知道要进行排序的对象数组的情况,倘若对象数组元素不存在value属性,那就会报错了,因此,你在撰写自己的规则时,应该适用其他属性规则判断。

假如我们现在不规定按照哪一个属性排序,比如除了value属性,我们还有其他的属性,希望能重复用这个算法,应该怎么办呢?

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

没错,核心的代码就这么简单了。在这种想法下面,我们还可以做一个设想:假如value相等的情况下,我们是否可以其他属性的大小排序输出?

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("value","score"));

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

参考原文:javascript中对一个对象数组按照对象某个属性进行排序_唐霜的博客

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wb_javaScript/article/details/128823707

智能推荐

GAN 李宏毅 课程笔记(一)-程序员宅基地

文章浏览阅读405次。Generator 不用想得太复杂,就是一个函数。函数的形式可以是NN。输入一个向量,这个向量可以看成一个控制向量,用向量中的元素表示生成对象的属性。生成对象可以是不同的东西,图片矩阵,文字序列都可以,需要具体控制。这可以弄出一个有趣的应用,通过改变输入向量,生成人脸渐变的中间图像。比如用向量中的第一个元素表示头发的长度,导数第二个表示头发的颜色。一样的,判别器也可以看成一个函数,可以是NN。它的输入是前面生成的对象,比如一张图片。输入是一个数字,就是生成对象的逼真程度,符合程度。GAN的原_gan 李

第三组_16通信一班_085_防火墙技术-程序员宅基地

文章浏览阅读312次。实验一实验环境ENSP模拟器实验拓扑图1-1IP地址规划设备接口地址掩码网关R1GE0/0/0172.16.85.1255.255.255.0N/AGE0/0/1..._packet tracer - 配置基于区域的策略防火墙 (zpf)

【数据结构与算法】-哈夫曼树(Huffman Tree)与哈夫曼编码_哈夫曼编码树-程序员宅基地

文章浏览阅读3.4w次,点赞185次,收藏1.1k次。超详细讲解哈夫曼树(Huffman Tree)以及哈夫曼编码的构造原理、方法,并用代码实现。_哈夫曼编码树

IDEA工具避坑指南(五):如何统一编码为UTF-8 | Tomcat控制台乱码_idea tomcat设置编码utf8-程序员宅基地

文章浏览阅读6.6k次,点赞8次,收藏25次。工欲善其事必先利其器,虽然IDEA工具很强大,如果优化不到位,用起来仍然会蹩手蹩脚,如果不在一开始统一编码,而是在项目进行到中间时统一编码,最常见的诡异问题:1、把文件编码统一为UTF-8,这个配置文件乱码2、如果把编码统一为GBK或者GB2312,那个配置文件乱码所以,一开始就统一编码格式,很重要。 ..._idea tomcat设置编码utf8

计算机毕业设计 SSM+Vue线上购物平台商城系统 网购商城管理系统 购物商城信息管理系统Java Vue MySQL数据库 远程调试 代码讲解_基于ssm和vue的网上商城-程序员宅基地

文章浏览阅读232次。计算机毕业设计 SSM+Vue线上购物平台商城系统 网购商城管理系统 购物商城信息管理系统_基于ssm和vue的网上商城

抖音接单点赞任务运营平台PHP网站源码_抖音接二维码平台-程序员宅基地

文章浏览阅读379次,点赞14次,收藏3次。这是一套基于ThinkPHP开发的抖音接单运营平台PHP网站源码 新媒体电商平台系统源码,含三级代理裂变,静态返佣/动态返佣均,防红跳转,自动机器人做任务等功能。后台:http://123.rlxx.vip/index.php/Admin/Public/login.html。3、修改/服务器目录/Application/Common/Conf/db.php中的数据库名、用户名、密码。后台:你的域名/index.php/Admin/Public/login.html。4、后台可设置注册即送X天机器人。_抖音接二维码平台

随便推点

Python爬虫:xpath,cookie都正确仍然无法爬取需要的内容解决方法之一_xpath写的都对 为什么抓不到内容-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏10次。经过很多次尝试以及仔细观察所爬取的html代码内容,我发现有一个标签里含有的css代码:style = display:none ,这行代码可以把这个标签里面的内容隐藏。展开这个标签里面的内容,很可能就是我们所需要的真实的页面a标签里面的url地址。注意,这里说了一般,有些网站的反爬措施很高级,甚至会封掉你的ip。看这篇文章的猿猿们肯定有了一定的python-xpath爬虫基础了,后面对li_tree的处理以及延伸获取所需要的页面内容我在这就不介绍啦!这样我们就得到了正确的li_tree。_xpath写的都对 为什么抓不到内容

iOS开发常用的RGB色值和中文名字_苹果远峰蓝的rgb-程序员宅基地

文章浏览阅读633次。RGB值 RGB值 RGB值黑色000#000000黄色2552550#FFFF00浅灰蓝色176_苹果远峰蓝的rgb

SpringBoot+Mysql+小程序实现的美团外卖美食小程序系统附带前台和后台代码_美团前端微信小程序代码-程序员宅基地

文章浏览阅读778次。随着数字化技术兴起,各种应用软件覆盖各行各业,大大推动了产业发展。然而,在外卖点餐领域,现实问题仍然存在,例如订单处理效率低、库存管理复杂、客户服务水平不一以及数据分析能力不足等。为解决这些问题,本文研发了一款基于微信小程序与Spring Boot的外卖点餐系统,旨在提升效率和管理水平,优化顾客体验。本外卖订餐系统融合了先进技术与实践,采用Spring Boot框架开发后端,借助MySQL数据库存储数据,并通过微信小程序实现用户端。系统的创新表现在全面提升了管理效率和顾客服务。_美团前端微信小程序代码

在本机搭建自己的ftp服务器--最简单的方法(详细教程)_ftp服务器怎么搭建-程序员宅基地

文章浏览阅读10w+次,点赞159次,收藏1.1k次。在本机搭建自己的ftp服务器--最简单的方法(详细教程)FTP服务器可以在局域网中快速传输文件,是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。..._ftp服务器怎么搭建

单链表逆置的三种方法(头插法逆置、就地逆置、递归逆置)顺序表【数组】的逆置的代码实现(使用java语言实现,用对象模拟内存结构和指针)_单链表的就地逆置和前插法-程序员宅基地

文章浏览阅读1.2k次。单链表节点定义/** * className:LNode * * @author:zjl * @version:0.1 * @date:2020/7/1622:25 * @since:jdk1.8 */public class LNode { private Object data; private LNode next; public LNode() { this.data = null; this.next = null; _单链表的就地逆置和前插法

SWUST OJ 574: Renting Boats_swustoj574-程序员宅基地

文章浏览阅读483次。题目描述长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1< =i< j < =n。试设计一个算法,计算出从游艇出租站1 到游艇出租站n 所需的最少租金。输入第1 行中有1 个正整数n(n<=200),表示有n个游艇出租站。接下来的n-1 行是r(i,j),1< =i< j < =n。输出从游艇_swustoj574