JavaScript排序sort()方法(解决null、undefined、0之间的排序(混乱)问题)

news2024/12/26 10:43:03

在这里插入图片描述
在这里插入图片描述

问题:

如果数组内某一对象为空值,排序是怎样的呢?(显然并不是按年龄顺序排序的,因为存在null和undefined)

var arr=[{"age":24,name:'zs'},{"age":0,name:'ls'},{"age":0,name:'gr'}{"age":null,name:'yo'},{"age":7,name:'pl'},{"age":undefined,name:'tt'}{"age":null,name:'jz'},{"age":0,name:'mn'},{"age":undefined,name:'we'}]

//[{"age": 0,"name": "ls"},{"age": 0,"name": "gr"},{"age": null,"name": "yo"},
//{"age": null,"name": "jz"},{"age": 0,"name": "mn"},{"age": 7,"name": "pl"},
//{"age": 24,"name": "zs"},{"age":undefined,"name": "tt"},
//{"age":undefined,"name": "we"}]
console.log(arr.sort(compare("age")));

解决方法:

sort 方法提供的排序方法中,如果返回的数字是 0 那么会保持原顺序,如果返回的数字 >0 那么会将 a 至于 b 之后,如果返回的数字 < 0 那么会将 a 至于 b 之前。

如果遇到字段可能是 undefined,那么我们需要特殊判断处理下。

首先判断如果 a,b 的排序字段都是 undefined 返回 0 保持原顺序。

再判断如果 a 的字段是 undefined 但 b 的排序字段存在则返回 >0 将 a 至于 b 之后。

再判断 b 的排序字段如果是 undefined 但 a 的排序字段存在则返回 <0 将 a 至于 b 之前。

最后 a,b 的排序字段都存在时,使用 a,b 的排序字段计算后的返回结果判断顺序

const compare = function (orderType, props) {
    return function (obj1, obj2) {
        var val1 = obj1[props];
        var val2 = obj2[props];
        if (val1 == null && val2 == null) {
            return 0;
        }
        if(val1 == null){
            return 999;
	    }
	    if(val2 == null){
	        return -999
	    }
        if (typeof val1 === 'string' && typeof val2 === 'string') {
            if (val1 < val2) {
                return -1;
            } else if (val1 > val2) {
                return 1;
            }
            return 0;
        }
	    return orderType === 'ascend' ? val1 - val2 : val2 - val1;
    } 
}
const orderType = 'descend'; // descend
const rr = prodInfo.sort(compare(orderType, 'num'))
console.log(rr.map(item => item.num))

参考链接1:https://www.cnblogs.com/gby-web/p/16743564.html
参考链接2:https://juejin.cn/post/7165121725678665765/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构算法 -分而治之算法

引言 坤坤是一个养鸡场的员工&#xff0c;他非常热爱他的工作&#xff0c;并且总是努力提高他的专业技能。有一天&#xff0c;养鸡场接到了一项任务&#xff1a;在短时间内处理一批大量的鸡。 这批鸡数量非常大&#xff0c;比普通的数量要多得多&#xff0c;坤坤意识到他们需…

作业(Job)——OS

目录 1、批处理作业 2、交互式作业 小结&#xff1a;作业、进程、线程 作业概念 &#xff1a;用户要求计算机系统为其完成的计算任务集合。 作业步&#xff08;job step) &#xff1a;作业处理过程中一个相对独立的步骤 一般一个作业步可由一个进程完成某些作业步之间可以并…

2023世界人工智能大会-图技术高峰论坛重磅来袭!邀您共同参与!

2023年7月6-8日&#xff0c;一年一度的世界人工智能大会&#xff08;WAIC&#xff09;即将拉开帷幕。创邻科技作为大会的战略合作伙伴&#xff0c;将承办第三届图技术高峰论坛。 过去两届图技术论坛&#xff0c;分别以“大数据关联”和“AI应用”为关键词&#xff0c;邀请图技…

基于ChatGPT的端到端语音聊天机器人项目实战(一)

基于ChatGPT的端到端语音聊天机器人项目实战 ChatGPT API后台开发实战 本节主要是跟大家分享一个端到端的基于模型驱动的对话机器人,会有前端和后端,也会有一些具体模型的调用,读者需具有Python语言编程的基础,这是前置性的条件,有了这个基础,理论上讲本节所有的内容,…

Sui Move HackerHouse预热开启,9月大理见

9月3日&#xff0c;Sui Move 主题的 Antalpha HackerHouse 将在大理举办&#xff0c;为期 21 天&#xff0c;向所有 Web3 开发者发出 co-buidling & co-living 邀请。 本期 HackerHouse 由 Antalpha Labs 发起&#xff0c;Sui Foundation赞助&#xff0c;MoveFuns DAO、No…

魔视智能MOTOVIS入选世界经济论坛「2023年度技术先锋」

&#xffee;世界经济论坛&#xff08;World Economic Forum&#xff09;宣布从全球范围内选出了100家最有前途的技术先锋企业&#xff0c;这些企业致力于解决可持续性、气候变化和医疗保健等问题。 &#xffee;作为嵌入式人工智能自动驾驶的推动者&#xff0c;魔视智能MOTOVI…

项目管理,到底管什么?

在以前&#xff0c;项目管理职能单一且明确的时候&#xff0c;大家对项目管理的认知还比较统一&#xff1a;一个项目经理带领一个团队完成一个项目。 而在现在的环境下&#xff0c;尤其是互联网&#xff0c;项目经理的职能和定位以不同公司、不同老板、不同需要而参差不齐&…

制造业数字化转型解决方案

制造业数字化转型解决方案 数字化转型已成为制造业发展的必由之路&#xff0c;要提高生产制造水平&#xff0c;就需要提高对生产运营各环节数据的采集、处理和利用效率。当前的工业数据采集仍存在种种不足&#xff0c;现可以利用具有强大设备接入能力、通信协议转换能力、数据…

多线程(十):总结

本章用来处理一下之前遗漏的很多问题&#xff0c;在多线程那一章&#xff0c;很多常见面试题都没有讲&#xff0c;这里再来补充一下。 HashTable, HashMap, ConcurrentHashMap 之间的区别 HashTable, HashMap, ConcurrentHashMap 都带有Map&#xff0c;它们其实都是 Map 的接…

数据库设计软件Power Designer详解教程(附源码)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Power Designer概述 Power Designer 是美国Sybase公司的CASE工具集&#xff0c;利用Power Designer可分别从概念数据模型(Conceptual Data Model)和物理数据模型(Physical D…

如何查看某个starter的详细官方文档

\qquad 相信很多小伙伴在用到一个没怎么接触过的starter的时候&#xff0c;也有不知道怎么使用&#xff0c;怎么配置的苦恼&#xff0c;本文介绍一种大部分开源技术都能使用的查看官方文档的方式。 1.首先在github搜索相关技术 \qquad 这里以redis为例&#xff0c;如下&#x…

QT学习之旅 - network连接

文章目录 网络知识点IP地址IPv4和IPv6 端口号(协议端口)端口分类UDP端口和TCP端口 networkpro文件.h文件.cpp文件 UDP连接绑定端口绑定成功后等待对方进行连接点击发送源码扩展: nodejs-udp服务端(用于跟QT程序进行通信)现象 网络知识点 IP地址 192.168.127.170(√) 192.168.…

结构化GPT用例,在CSDN私密社区中死磕@ada 探索SpringBoot

在CSDN私密社区中死磕ada 探索SpringBoot Q: Spring的核心概念是哪些&#xff1f;Q: Spring MVC的核心概念是哪些&#xff1f;Q: SpringBoot的核心概念有哪些&#xff1f;Q: 介绍下SpringBoot AutoConfiguration的机制。Q: SpringBootConfiguration 和 Configuration 的区别是&…

使用esp32+micropython+microdot搭建web(http+websocket)服务器(超详细)第二部分

使用esp32micropythonmicrodot搭建web(httpwebsocket)服务器&#xff08;超详细&#xff09;第二部分 microdot文档速查 什么是Microdot?Microdot是一个可以在micropython中搭建物联网web服务器的框架micropyton文档api速查 Quick reference for the ESP32 实现http服务器 …

基于cycle of curves的Nova证明系统

1. 引言 主要见斯坦福大学Wilson Nguyen、Dan Boneh和微软研究中心Srinath Setty 2023年论文《Revisiting the Nova Proof System on a Cycle of Curves》。 前序博客有&#xff1a; Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记 在2021年Nova …

Java线程的六种状态(付代码解释)

目录 一.新建状态 (New) 解释 代码 运行结果 ​编辑 二.运行状态(Runnable) 解释 代码 运行结果 三.等待状态&#xff08;Waiting&#xff09; 解释 代码 运行结果 四.阻塞状态&#xff08;Blocked&#xff09; 解释 代码 运行结果 五.计时等待状态&#xff08;…

PCB设计系列分享-开关稳压器接地处理

目录 概要 整体架构流程 技术名词解释 1.DCDC&#xff1a; 2.PGND: 3.AGND: 技术细节 1.认识1 2.认识2 3.综合 小结 概要 提示&#xff1a;这里可以添加技术概要 如何使用带有模拟接地层(AGND)和功率接地层&#xff08;PGND)的开关稳压器? 这是许多开发人员在设计…

启用Windows应急重启功能

博主最近发现了Windows隐藏功能——应急重启&#xff0c;并且这个功能可以追溯到Windows Vista!但是因为大家习惯长按电源键关机所以就鲜为人知。今天博主叫你如何使用应急重启功能。 因为使用功能都无法截图&#xff0c;所以就不展示图片了。 第一步&#xff0c;按住CtrlAltD…

什么是元宇宙?元宇宙由哪些关键技术、设备构成?

元宇宙近几年来火爆起来,各个行业争先恐后加入。从目前来看,元宇宙初步体现在游戏娱乐行业、社交、消费、数字孪生等方面。元宇宙近两年开始在各个行业快速崛起,但各个行业并没有一个清晰的发展方向,那么什么是元宇宙? 元宇宙到底由哪些技术和设备组成&#xff1f;查询了很多资…

用于SOLIDWORKS装配体的X光机——SOLIDWORKS装配体直观工具

​ SOLIDWORKS报告和故障排除的瑞士军刀 如何快速的根据条件会装配体中的零部件进行分类&#xff1f; 如何快速找到装配体中的某些特定零件&#xff1f; 如何快速在图形区域中突出显示出特定的零部件&#xff1f; 如果你用过“SOLIDWORKS装配体直观工具”的话&#xff0c;…