当前位置: 首页 > news >正文

JS 对象数组排序方法测试

输出 

一.Array.prototype.sort()

1.默认排序 sort()

sort() 方法就地对数组的元素进行排序,并返回对相同数组的引用。默认排序是将元素转换为字符串,然后按照它们的 UTF-16 码元值升序排序。

由于它取决于具体实现,因此无法保证排序的时间和空间复杂度。

如果想要不改变原数组的排序方法,可以使用 toSorted()。

说明:两个重点。1、会改变原数组。2、默认按将元素转换为字符串排序。

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// Expected output: Array ["Dec", "Feb", "Jan", "March"]const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// Expected output: Array [1, 100000, 21, 30, 4]

2.比较函数 sort(compareFn)

定义排序顺序的函数。返回值应该是一个数字,其符号表示两个元素的相对顺序:如果 a 小于 b,返回值为负数,如果 a 大于 b,返回值为正数,如果两个元素相等,返回值为 0NaN 被视为 0

说明:自定义比较函数返回一个数值。一般为1,-1,0.

function compareFn(a, b) {if (根据排序标准,a 小于 b) {return -1;}if (根据排序标准,a 大于 b) {return 1;}// a 一定等于 breturn 0;
}
const stringArray = ["Blue", "Humpback", "Beluga"];
const numberArray = [40, 1, 5, 200];
const numericStringArray = ["80", "9", "700"];
const mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200];function compareNumbers(a, b) {return a - b;
}stringArray.sort(); // ['Beluga', 'Blue', 'Humpback']numberArray.sort(compareNumbers); // [1, 5, 40, 200]numericStringArray.sort(); // ['700', '80', '9']
numericStringArray.sort(compareNumbers); // ['9', '80', '700']mixedNumericArray.sort(compareNumbers); // [1, 5, '9', 40, '80', 200, '700']

二.对象数组

let arr = [  { name: 'Zhang', age: 25, score: 85 },  { name: 'Li', age: 20, score: 90 },  { name: 'Wang', age: 22, score: 80 },  { name: 'Zhao', age: 22, score: 92 }  
];  // 按 age 升序排序,如果 age 相同则按 score 降序排序  
arr.sort((a, b) => {  if (a.age !== b.age) {  return a.age - b.age; // 按 age 升序排序  } else {  return b.score - a.score; // 如果 age 相同,按 score 降序排序  }  
});  console.log(arr);
[  { name: 'Li', age: 20, score: 90 },  { name: 'Wang', age: 22, score: 80 },  { name: 'Zhao', age: 22, score: 92 },  { name: 'Zhang', age: 25, score: 85 }  
]

三.通用方法

1.指定单一对象元素属性

function sortObjectsByProperty(array, property) {return array.sort(function(a, b) {if (a[property] < b[property]) {return -1;} else if (a[property] > b[property]) {return 1;} else {return 0;}});
}
var objects = [{ name: 'Apple', price: 15 },{ name: 'Banana', price: 10 },{ name: 'Cherry', price: 20 }
];var sortedObjects = sortObjectsByProperty(objects, 'price');
console.log(sortedObjects);

输出:

[{ name: 'Banana', price: 10 },{ name: 'Apple', price: 15 },{ name: 'Cherry', price: 20 }
]

2.指定对象元素多属性

function sortObjectsByProperties(array, ...properties) {  return array.sort((a, b) => {  for (const property of properties) {  if (a[property] < b[property]) {  return -1;  } else if (a[property] > b[property]) {  return 1;  }  // 如果属性相等,则继续比较下一个属性  }  // 所有属性都相等  return 0;  });  
}  // 示例对象数组  
const employees = [  { name: 'Alice', age: 30, salary: 50000 },  { name: 'Bob', age: 25, salary: 60000 },  { name: 'Charlie', age: 35, salary: 55000 },  
];  // 使用剩余参数传入多个属性进行排序  
const sortedEmployees = sortObjectsByProperties(employees, 'age', 'salary');  console.log(sortedEmployees);

输出:

[  { name: 'Bob', age: 25, salary: 60000 }, // 年龄最小  { name: 'Alice', age: 30, salary: 50000 }, // 年龄次小,但薪水低于Charlie  { name: 'Charlie', age: 35, salary: 55000 } // 年龄最大,薪水也最高(在同龄人中)  
]

四. 对象数组汉字按拼音排序

1.使用stringObject.localeCompare(target)

const chinesePeople = [  { name: '张三', age: 30 },  { name: '李四', age: 25 },  { name: '王五', age: 35 },  { name: '赵六', age: 40 },  
];  // 使用 localeCompare 对名字属性进行排序  
chinesePeople.sort((a, b) => a.name.localeCompare(b.name, 'zh-CN'));  console.log(chinesePeople);

输出:

[{ name: '李四', age: 25 },{ name: '王五', age: 35 },{ name: '张三', age: 30 },{ name: '赵六', age: 40 } 
]

2.使用第三方库

如果你想要根据汉字拼音对对象数组进行排序,你需要先将汉字转换为拼音,然后根据拼音进行排序。这通常需要使用到第三方库来实现汉字到拼音的转换,比如 pinyin 库。

npm install pinyin
const pinyin = require('pinyin');  function sortObjectsByChinesePinyin(array, propertyName) {  return array.sort((a, b) => {  const aPinyin = pinyin(a[propertyName], { style: pinyin.STYLE_NORMAL, heteronym: false }).join('');  const bPinyin = pinyin(b[propertyName], { style: pinyin.STYLE_NORMAL, heteronym: false }).join('');  return aPinyin.localeCompare(bPinyin);  });  
}  // 示例对象数组  
const chineseNames = [  { name: '张三', age: 30 },  { name: '李四', age: 25 },  { name: '王五', age: 35 },  
];  // 使用汉字拼音对名字进行排序  
const sortedChineseNames = sortObjectsByChinesePinyin(chineseNames, 'name');  console.log(sortedChineseNames);

输出:

[  { name: '李四', age: 25 }, // 'lǐ sì'  { name: '王五', age: 35 }, // 'wáng wǔ'  { name: '张三', age: 30 }  // 'zhāng sān'  
]

强调:如果用VS调试,别忘记了在luanch.jsion文件中添加  "console": "integratedTerminal",这句话,不然会报错。还看不到运行结果。

相关文章:

JS 对象数组排序方法测试

输出 一.Array.prototype.sort() 1.默认排序 sort() sort() 方法就地对数组的元素进行排序&#xff0c;并返回对相同数组的引用。默认排序是将元素转换为字符串&#xff0c;然后按照它们的 UTF-16 码元值升序排序。 由于它取决于具体实现&#xff0c;因此无法保证排序的时…...

【计算机考研】408学到什么程度才能考130?

408考130要比考研数学考130难的多 我想大部分考过408的考生都是这么认为的。408的难点在于他涉及的范围太广了&#xff0c;首先如果你要备考408&#xff0c;你要准备四门课程&#xff0c;分别是数据结构&#xff0c;计算机组成原理&#xff0c;操作系统和计算机网络。 这四门…...

“智农”-农业物联网可视化

大棚可视化|设施农业可视化|农业元宇宙|农业数字孪生|大棚物联网|大棚数字孪生|农业一体化管控平台|智慧农业可视化|智农|农业物联网可视化|农业物联网数字孪生|智慧农业|大棚三维可视化|智慧大棚可视化|智慧大棚|农业智慧园区|数字农业|数字大棚|农业大脑|智慧牧业数字孪生|智…...

day03-网络编程

1>TCP机械臂测试 #include<myhead.h> #define SER_IP "10.211.55.11" #define SER_PORT 8888 #define CLI_IP "10.211.55.9" #define CLI_PORT 6666 //客户端 int main(int argc, const char *argv[]) {//1、创建用于通信的套接字文件描述符int …...

Java反射,动态代理。笔记

1.pathClass Loader 和 Dex ClassLoader 在Android 5.0以下的版本中,两者之间的区别为: DexClassLoader:可加载jar、apk和dex」可以从SD卡中加载PathClassLoader:只能加载已安裝到系統中(即/data/app目录下)的apk文件但是随着Android版本的升级,到Android …...

作为团队开发组长你需要做的:

当你需要开始团队开发时&#xff0c;以下是一些你可能需要知道和使用的工具、实践和原则&#xff1a; 1. 版本控制系统 (VCS): 使用版本控制系统&#xff08;如Git&#xff09;来管理代码。这能确保团队成员协同工作时能够跟踪和管理代码的变更。创建分支进行开发&#xff0c…...

Windows安装Neo4j数据库教程(3.X版本)

安装java的jdk&#xff08;jdk1.8仅支持Neo4j 3.X版本&#xff09;去 Index of /doc/neo4j/ 下载目标版本的Windows zip安装包将安装包解压到任意目录&#xff0c;并记住解压后带版本号的文件夹路径添加系统环境变量&#xff0c;变量名&#xff1a;NEO4J_HOME&#xff0c;变量值…...

无人机飞行控制系统技术,四旋翼无人机控制系统建模技术详解

物理建模是四旋翼无人机控制系统建模的基础&#xff0c;主要涉及到无人机的物理特性和运动学特性。物理建模的目的是将无人机的运动与输入信号&#xff08;如控制电压&#xff09;之间的关系进行数学描述。 四旋翼无人直升机是具有四个输入力和六个坐标输出的欠驱动动力学旋翼…...

程序员的金三银四求职宝典:如何在关键时期脱颖而出?

个人主页&#xff1a;17_Kevin-CSDN博客 随着春天的脚步渐近&#xff0c;程序员们的求职热潮也随之而来。在这个被称为“金三银四”的招聘季&#xff0c;如何从众多求职者中脱颖而出&#xff0c;成为了许多程序员关注的焦点。本文将为你提供一份全面的求职宝典&#xff0c;助你…...

分享经典、现代和前沿软件工程课程

随着信息技术的发展&#xff0c;软件已经深入到人类社会生产和生活的各个方面。软件工程是将工程化的方法运用到软件的开发、运行和维护之中&#xff0c;以达到提高软件质量&#xff0c;降低开发成本的目的。软件工程已经成为当今最活跃、最热门的学科之一。 本次软件工程MOOC课…...

网络工程师笔记3

IP地址类型 A类 255.0.0.0B类 255.255.0.0C类 255.255.255.0D类 E类 子网掩码&#xff1a;从左到右连续的确定网络位 2-4-8-16-32-64-128-256 128 &#xff1a; 1000 0000 64 &#xff1a; 0100 0000 32 &#xff1a; 0010 0000 16 &#xff1a; 0001 0000 8 &am…...

【菜鸟入门!】Matlab零基础快速入门教程

数学建模竞赛中&#xff0c;编程软件是必不可缺少的&#xff0c;比如大家都熟知的MATLAB多数同学们都会经常用到&#xff0c;今天给大家介绍一些MATLAB的基本元素&#xff0c;希望帮助大家更好的掌握编写基本的函数&#xff01; 变量和数组 MATLAB 程序的基本数据单元是数组。一…...

数据中心GPU集群高性能组网技术分析

数据中心GPU集群组网技术是指将多个GPU设备连接在一起&#xff0c;形成一个高性能计算的集群系统。通过集群组网技术&#xff0c;可以实现多个GPU设备之间的协同计算&#xff0c;提供更大规模的计算能力&#xff0c;适用于需要大规模并行计算的应用场景。 常用的组网技术&…...

go垃圾回收

1 go 垃圾回收变更 Go 语言的垃圾回收器&#xff08;GC&#xff09;自其诞生以来一直在不断演进和优化&#xff0c;以提高性能、减少暂停时间和对程序执行的影响。以下是一些关键的改进和变更点&#xff1a; 并发标记周期&#xff1a; Go 语言从一开始就采用了并发标记&#xf…...

如何做代币分析:以 LEO 币为例

作者&#xff1a; lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;LEO 代币仪表板 &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数…...

数制和码制

目录 几种常见的数制 数制 基数 位权 常见的四种数制 十进制数 二进制数 八进制数 十六进制数 不同进制数的相互转换 例如 例如 编码 二-十进制码 例如 格雷码 例如 原码、反码和补码 几种常见的数制 关键术语 数制&#xff1a;以一组固定的符号和统一的规则来表示数值…...

Git Bash中安装tree

文章目录 问题描述解决办法A备选办法BRef 问题描述 在Git Bash中使用tree报错&#xff1a; tree # bash: tree: command not found解决办法A 下载二进制文件&#xff1a; https://gnuwin32.sourceforge.net/packages/tree.htm -> 选binary。下载后解压.zip 把解压后的tre…...

java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...

C++练手题系列一

第 1 题 【 问答题 】 • 有多少种二叉树 输入n(1<n<13)&#xff0c;求n个结点的二叉树有多少种形态 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 整数n 输出答案 样例输入 3 样例输出 5 第 2 题 【 问答题 】 • 城堡问题 1 2 3 4 5 6 7 ################…...

(下)async/await高级用法,你会多少种呢?

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 前言 众所周知&#xff0c;在 ECMA17 中加入了两个关键字 async、await&#xff0c;简单来说它们是基于 Promise 之上的语法糖&#xff0c;可以让异步操作更加简洁明了。在掌握async、await的基础用法后&#xff0…...

Unity C#不是编程语言,而是与引擎对话的指令系统

1. 这不是“学编程”&#xff0c;而是重新建立你和计算机对话的语法体系很多人点开这个标题&#xff0c;心里想的是&#xff1a;“不就是写几行代码嘛&#xff0c;网上教程多的是。”我带过三十多个零基础学员做 Unity 小项目&#xff0c;其中超过 21 人卡在同一个地方——不是…...

从零打造 AI 小说创作平台(四):项目与章节管理

从零打造 AI 小说创作平台(四):项目与章节管理 系列:从零打造 AI 小说创作平台 NovelForge 篇章:第 4 篇 / 共 10 篇 关键词:CRUD、自动保存、软删除、章节排序、字数统计 前言 项目管理是连接用户认证和 AI 创作流水线的桥梁。这个模块看似简单(就是 CRUD),但有几个…...

AI写论文真给力!4款AI论文生成工具,开启高效论文写作模式!

AI论文写作工具评测 还在为撰写期刊论文、毕业论文或职称论文而感到烦恼吗&#xff1f;在人工写作的过程中&#xff0c;面对那海量的文献资料&#xff0c;犹如在茫茫大海中捞针&#xff0c;而那些繁琐的格式要求更是让我们无从下手&#xff0c;不断的修改反复消耗我们的耐心&a…...

Ventoy解决方案:告别重复格式化的万能启动盘制作神器

Ventoy解决方案&#xff1a;告别重复格式化的万能启动盘制作神器 【免费下载链接】Ventoy A new bootable USB solution. 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy Ventoy是一款革命性的开源可启动USB解决方案&#xff0c;通过创新的免格式化技术&…...

3步终极解决方案:如何专业卸载Windows 10/11的Microsoft Edge浏览器

3步终极解决方案&#xff1a;如何专业卸载Windows 10/11的Microsoft Edge浏览器 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemo…...

如何用Yarn Spinner在15分钟内构建游戏对话系统:从新手到专家的完整指南

如何用Yarn Spinner在15分钟内构建游戏对话系统&#xff1a;从新手到专家的完整指南 【免费下载链接】YarnSpinner The core compiler and engine-agnostic components for Yarn Spinner, the friendly dialogue tool. 项目地址: https://gitcode.com/gh_mirrors/ya/YarnSpin…...

RLHF实战指南:从人类反馈到对齐AI的工程化路径

1. 项目概述&#xff1a;当AI学会“听人话”——人类反馈如何真正撬动强化学习的天花板你有没有试过教一只特别聪明但完全不懂人情世故的助手做事&#xff1f;比如&#xff0c;你想让它帮你写一封得体又不失温度的辞职信&#xff0c;它却交出一份逻辑严密、用词精准、但通篇“根…...

充电桩行业转型:从规模竞争到质量竞争,CCC认证锚定新赛道

过去五年&#xff0c;中国充电桩行业的核心叙事只有一个字&#xff1a;铺。谁能更快拿点位&#xff0c;谁能更快建站&#xff0c;谁能更快完成城市、县域、高速、社区的覆盖&#xff0c;谁就有资格坐上牌桌。功率数字不断攀升&#xff0c;铺设数量不断刷新&#xff0c;市场份额…...

网易2026年Q1财报:游戏增长背后,AI、跨端与全球化面临哪些挑战?

网易发布2026年Q1财报5月21日&#xff0c;网易发布2026年第一季度财报。大体上&#xff0c;网易呈现出基本面企稳、公司效率提升以释放利润的态势。财报显示&#xff0c;网易Q1净收入306亿元&#xff0c;同比增长6.1%&#xff0c;Non - GAAP归母净利润为107亿元。游戏及相关增值…...

3个步骤实现浏览器中魔兽争霸与星际争霸模型渲染的完整指南

3个步骤实现浏览器中魔兽争霸与星际争霸模型渲染的完整指南 【免费下载链接】mdx-m3-viewer A WebGL viewer for MDX and M3 files used by the games Warcraft 3 and Starcraft 2 respectively. 项目地址: https://gitcode.com/gh_mirrors/md/mdx-m3-viewer 你是否曾因…...