我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript中怎么对对象数组进行排序

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript中怎么对对象数组进行排序

这期内容当中小编将会给大家带来有关JavaScript中怎么对对象数组进行排序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

基本数组排序

默认情况下,Array.sort函数将数组中需要排序的每个元素转换为字符串,并按 Unicode 顺序对其进行比较。

const foo = [9, 1, 4, 'zebroid', 'afterdeck']; foo.sort(); // returns [ 1, 4, 9, 'afterdeck', 'zebroid' ]  const bar = [5, 18, 32, new Set, { user: 'Eleanor Roosevelt' }]; bar.sort(); // returns [ 18, 32, 5, { user: 'Eleanor Roosevelt' }, Set {} ]

你可能会好奇为啥32排在5之前。发生这种情况是因为数组中的每个元素都首先转换为字符串,并且按照Unicode顺序,"32"在"5"之前。

需要注意的是,Array.sort会更改原数组。

const baz = ['My cat ate my homework', 37, 9, 5, 17]; baz.sort(); // baz数组被修改 console.log(baz); // shows [ 17, 37, 5, 9, 'My cat ate my homework' ]

为避免这种情况,我们可以创建要排序的数组的新实例,然后在新的数组上进行修改。这里可以使用 Array.slice它返回是一个新的数组实例。

// 创建baz数组的新实例并对其进行排序 const sortedBaz = baz.slice().sort();

我们还可以使用 ES6 中的展开运算符来做:

const sortedBaz = [...baz].sort();

在两种情况下,输出是相同的:

console.log(baz); // ['My cat ate my homework', 37, 9, 5, 17]; console.log(sortedBaz); // [ 17, 37, 5, 9, 'My cat ate my homework' ]

单独使用Array.sort不能对对象数组进行排序。但不必担心,sort  的还提供一个参数,该参数使数组元素根据compare函数的返回值进行排序。

使用比较函数进行排序

假设foo和bar是compare函数要比较的两个元素,compare函数的返回值设置如下:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 小于0:foo在bar之前

  3. 大于0 :bar在foo之前

  4. 等于0:foo和bar彼此保持不变。

来看一个简单的示例:

const nums = [79, 48, 12, 4];  function compare(a, b) {   if (a > b) return 1;   if (b > a) return -1;    return 0; }  nums.sort(compare); // => 4, 12, 48, 79

我们可以稍微重构一下:

function compare(a, b) {   return a - b; }

使用在使用箭头函数进行重构:

nums.sort((a, b) => a - b);

如何对对象数组进行排序

现在,我们来按一下对对象数组的排序。假设有下面的 singers 数组:

const singers = [   { name: 'Steven Tyler', band: 'Aerosmith', born: 1948 },   { name: 'Karen Carpenter', band: 'The Carpenters', born: 1950 },   { name: 'Kurt Cobain', band: 'Nirvana', born: 1967 },   { name: 'Stevie Nicks', band: 'Fleetwood Mac', born: 1948 }, ];

我们可以使用 compare函数,然后根据 singers 中的 band 字段来进行排序。

function compare(a, b) {   // 使用 toUpperCase() 忽略字符大小写   const bandA = a.band.toUpperCase();   const bandB = b.band.toUpperCase();    let comparison = 0;   if (bandA > bandB) {     comparison = 1;   } else if (bandA < bandB) {     comparison = -1;   }   return comparison; }  singers.sort(compare);  

如果要让上面的顺序相反,可以这么做:

function compare(a, b) {   ...    // 乘以-1来反转返回值   return comparison * -1; }

创建一个动态排序函数

最后,排序函数更具动态性。

我们创建一个排序函数,可以使用该函数对一组对象进行排序,这些对象的值可以是字符串或数字。该函数有两个参数-我们要排序的键和返回结果的顺序(即升序或降序):

const singers = [   { name: 'Steven Tyler', band: 'Aerosmith', born: 1948 },   { name: 'Karen Carpenter', band: 'The Carpenters', born: 1950 },   { name: 'Kurt Cobain', band: 'Nirvana', born: 1967 },   { name: 'Stevie Nicks', band: 'Fleetwood Mac', born: 1948 }, ];  function compareValues(key, order = 'asc') {   return function innerSort(a, b) {     if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {       // 该属性在其中一个对象上不存在       return 0;     }      const varA = (typeof a[key] === 'string')       ? a[key].toUpperCase() : a[key];     const varB = (typeof b[key] === 'string')       ? b[key].toUpperCase() : b[key];      let comparison = 0;     if (varA > varB) {       comparison = 1;     } else if (varA < varB) {       comparison = -1;     }     return (       (order === 'desc') ? (comparison * -1) : comparison     );   }; }

使用:

//数组按`band`排序,默认为升序 singers.sort(compareValues('band'));  // 数组按 `band` 降序排序 singers.sort(compareValues('band', 'desc'));  // 数组按 `name` 升序排序 singers.sort(compareValues('name'));  // 数 组born 降序排序 singers.sort(compareValues('born', 'desc'));

在上面的代码中,hasOwnProperty方法用于检查指定的属性是否在每个对象上定义,且没有通过原型链继承。如果没有在两个对象上定义,函数返回0,排序顺序保持不变(即对象之间保持不变)。

typeof运算符还用于检查属性值的数据类型,这使函数可以确定对数组进行排序的正确方法。如果指定属性的值是一个字符串,则使用toUpperCase方法将其所有字符都转换为大写,因此排序时将忽略字符大小写

最后,你可以根据自己需求来调整上面的函数。

String.prototype.localeCompare()

在上面的示例中,我们希望能够对对象数组进行排序,其值可以是字符串或数字。但是,如果我们知道处理值是字符串的对象,则可以使用 JS  的localeCompare方法

比较两个字符串,并返回下列值中的一个:

  • 如果 字符串 在 字母 表中 应该 排在 字符串 参数 之前, 则 返回 一个 负数;

  • 如果 字符串 等于 字符串 参数, 则 返回 0;

  • 字符串 在 字母 表中 应该 排在 字符串 参数 之后, 则 返回 一个 正数;

['bjork', 'Bjork', 'Bj&ouml;rk'].sort(); // [ 'Bjork', 'Bj&ouml;rk', 'bjork' ]  ['bjork', 'Bjork', 'Bj&ouml;rk'].sort((a, b) => a.localeCompare(b)); //  [ 'bjork', 'Bjork', 'Bj&ouml;rk' ]

根据compareValues函数,我们可以这么写:

function compareValues(key, order = 'asc') {   return function innerSort(a, b) {     if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return 0;     const comparison = a[key].localeCompare(b[key]);      return (       (order === 'desc') ? (comparison * -1) : comparison     );   }; }

上述就是小编为大家分享的JavaScript中怎么对对象数组进行排序了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript中怎么对对象数组进行排序

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP中怎么对数组进行降序排序

今天就跟大家聊聊有关PHP中怎么对数组进行降序排序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数组降序排序的三个函数:rsort():对数组元素进行降序排序arsort():根据关
2023-06-20

怎么在java中对数组进行排序

这期内容当中小编将会给大家带来有关怎么在java中对数组进行排序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统
2023-06-14

PHP中怎么对整数数组进行排序

这篇文章将为大家详细讲解有关PHP中怎么对整数数组进行排序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先从标题可知,这回要说的是怎么编写一个PHP类来实现对整数数组的排序,其实在PHP中
2023-06-20

怎么在linux中对awk数组进行排序

怎么在linux中对awk数组进行排序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码如下:[chengmo@localhost ~]$ awk BEGIN{
2023-06-13

PHP中怎么用数组函数对数组进行升序排序

这篇文章主要讲解了“PHP中怎么用数组函数对数组进行升序排序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中怎么用数组函数对数组进行升序排序”吧!今天我们就来看看数组排序中的升序操作,
2023-06-20

labview怎么对二维数组进行排序

在LabVIEW中,可以使用Sort 2D Array函数对二维数组进行排序。以下是一个示例步骤:1. 创建一个二维数组。可以使用Build Array或者Initialize Array函数来创建一个二维数组,或者使用已有的二维数组数据来
2023-09-26

php怎么对一维数组进行排序

这篇文章主要介绍了php怎么对一维数组进行排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php怎么对一维数组进行排序文章都会有所收获,下面我们一起来看看吧。PHP作为脚本语言,常被用于Web开发方面的应用。
2023-07-05

怎么在python中对元组进行排序

本篇文章为大家展示了怎么在python中对元组进行排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整型)、long
2023-06-14

java中实现对类的对象进行排序

我们需要对类按照类中的某一个属性(或者多个属性)来对类的对象进行排序,有两种方法可以实现,一种方法是类实现Comparable接口,然后调用Collections.sort(List)方法进行排序,另一种方法是类不实现Comparable接口,而在排序时使用C
java中实现对类的对象进行排序
2022-03-08

mysql中怎么对数据进行排序

在MySQL中,可以使用ORDER BY子句对数据进行排序。语法如下:SELECT * FROM table_name ORDER BY column_name [ASC|DESC];其中,SELECT *表示选择所有列,table_
mysql中怎么对数据进行排序
2024-04-09

PHP中对数组进行排序的方法

这篇文章主要介绍PHP中对数组进行排序的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法
2023-06-14

vb怎么对数组里的数据进行排序

在VB中,可以使用Array.Sort方法对数组中的数据进行排序。以下是一个示例代码:Dim myArray() As Integer = {5, 3, 8, 1, 2}Array.Sort(myArray)For Each num As
vb怎么对数组里的数据进行排序
2024-02-29

使用 PHP 对数组中的对象进行排序,保留原始键名

答案:在 php 中,使用 uasort() 函数可以对数组中的对象根据用户定义的比较函数进行排序,同时保留原始键名。详细描述:语法:uasort($array, $value_compare_func)比较函数规则:接受两个数组元素作为参
使用 PHP 对数组中的对象进行排序,保留原始键名
2024-05-04

js中如何对json数组进行排序

这篇文章主要介绍了js中如何对json数组进行排序的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-16

编程热搜

目录