js sort方法指南

这篇具有很好参考价值的文章主要介绍了js sort方法指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

js sort方法指南

本文将详细介绍如何使用sort方法对数组中的原始数据和对象进行排序:

sort 方法简介

js提供了一个排序方法sort可以对数组进行就地排序(意味着不进行复制)并返回排序后的数组。我们可以通过传递对比函数来修改内部的数组元素的顺序,但是不能修改sort方法所使用的算法。

使用方式:

// 最简单的用法,不需要传递一个对比方法,使用默认的
[].sort();

// 使用箭头函数
[].sort((a, b) => {
 ...
})

// 传递一个方法
[].sort(compareFn)

在过去的 Chrome 中,排序算法并不像今天那么好。它之前的实现之一包括插入排序O(n²)

但是在现在我们使用的是一种名为Tim Sort O(n log n)的算法,此算法修改了合并排序,作为自适应稳定的归并排序变体。

稳定的排序算法意味着如果两个相同值的值彼此相邻,则它们在排序后保持相同的顺序。

对原始数据进行排序

对字符串数组进行排序

const names = ["Darui", "Bee", "Naruto", "Ada", "Sasuke", "Baki", "A"];

console.log(names.sort());
// 输出: ["A", "Ada", "Baki", "Bee", "Darui", "Naruto", "Sasuke"]

JavaScript 默认按字典顺序排序。字典顺序意味着像字典一样按字母顺序排序。如果两个字符串相等,则将最短的字符串放在第一位。

const str = ["aab", "ba", "aac", "bab", "aaa", "Aab", "aaaa"];

// 结果
"Aab" // 大写优先
"aa|a"
"aa|aa" // 和aaa相同,但是比aaa多一个a字符
"aa|b"  // 第三个字符c比aaaa中的a靠后 
"aa|c"  // 第三个字符c比aab的b靠后
"ba"    // b比a靠后
"bab"

对数字数字进行排序

对于纯数字数组不能直接通过sort()方法进行排序。

const scores = [9, 80, 19, 4, 20, 53];

console.log(scores.sort());

// 输出:  [19, 20, 4, 53, 80, 9]
// 并不符合预期

默认情况下,JavaScript 按字典顺序排序。对于字符串来说非常有用,但对于数字来说却很糟糕。我们必须通过一个对比方法。

function compareNumbers(a, b) {
  if (a < b) {
    return -1; // a 比 b 优先
  } else if (a > b) {
    return 1;  // b 比 a 优先
  }

  return 0; // 不修改顺序
}

当两个元素传递给对比函数,如果返回小于 0a则放在前面。如果结果大于0b则放在第一位。如果结果等于0,则保持ab的顺序相同。

function(a, b) return value 排序
> 0 b排在a前面
< 0 a排在b前面
=== 0 不改变顺序

通过在对比函数中返回一个整数,用于sort方法最终确定比较元素时的顺序。

为了正确地对数字进行排序,我们在下面的例子使用升序(a > b)对数字进行排序的方法。

const scores = [9, 80, 19, 4, 20, 53];

scores.sort((a, b) => {
  // 其实就是上面compareNumbers方法中的else if (a > b)判断
  return a - b;
});

console.log(scores);
// 输出  [4, 9, 19, 20, 53, 80]

降序就是使用b - a来实现:

const scores = [9, 80, 19, 4, 20, 53];

scores.sort((a, b) => {
  // 其实就是上面compareNumbers方法中的if (a < b)判断
  return b - a;
});

console.log(scores);
// 输出 [80, 53, 20, 19, 9, 4]

对对象数组进行排序

JavaScript 中,对象是具有key:value成对属性集合的变量。

const characters = [{
    name: 'eren',
    age: 1
  },
  {
    name: 'mikasa',
    age: 20
  },
  {
    name: 'levi',
    age: 90
  },
  {
    name: 'armin',
    age: 10
  },
];

由于对象具有多个属性,因此我们也需要传递一个对比函数来按我们想要的属性进行排序。

比如想按照年龄来排序

characters.sort((a, b) => {
  return a.age - b.age;
});

name则按字典顺序排序。文章来源地址https://www.toymoban.com/news/detail-604956.html

characters.sort((a, b) => {
  // 确保大小写同步
  const nameA = a.name.toUpperCase();
  const nameB = b.name.toUpperCase();

  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }

  return 0;
});

console.log(characters);

到了这里,关于js sort方法指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端学习笔记:JavaScript基础语法(ECMAScript)

    此博客参考b站:【黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程】https://www.bilibili.com/video/BV1Y84y1L7Nn?p=76vd_source=06e5549bf018e111f4275c259292d0da 这份笔记适用于已经学过一门编程语言(最好是C语言)的同学,如果你没有

    2024年02月16日
    浏览(46)
  • 深入理解 ECMAScript modules:提升你的 JavaScript 技能(六)

    🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_ CSDN 博客专家、23年度博客之星前端领域TOP1 🕠 牛客 高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课 签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你

    2024年02月21日
    浏览(51)
  • 深入理解 ECMAScript modules:提升你的 JavaScript 技能(一)

    🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_ CSDN 博客专家、23年度博客之星前端领域TOP1 🕠 牛客 高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课 签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你

    2024年02月20日
    浏览(42)
  • Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅

    Node.js作为一个基于Chrome V8引擎的JavaScript运行时环境,已经成为现代web开发中不可或缺的重要工具之一。它的出现极大地扩展了JavaScript的应用范围,使得开发者可以利用同一种语言来编写前端和后端的代码,从而实现全栈开发。Node.js具有非阻塞I/O、事件驱动的特性,使得它能

    2024年04月10日
    浏览(48)
  • 基于【ESLint+JavaScript Standard Style】标准的VUE/JS/html风格指南

    本规范是适用于小仙男团队及前端团队所搭建的各种前端框架代码的通用风格规范指南; 使用时,请遵循指南细则进行代码风格约束,并在提交之前确保进行代码风格的修正操作; 本规范参考WEB行业知名的JavaScript Standard Style 规范指南。并将在后续使用过程中,逐步进行符合

    2023年04月13日
    浏览(42)
  • JavaScript最热门的开发指南

    📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 CSS专栏:想学CSS的,冲这里 📢 Krpano专栏:想学VUE的,冲这里 🔔 上述专栏,都在不定期持续更新中!!!!!!!!!!!!! 文章目录: ✨ 前言 什么是JavaScript JavaS

    2024年01月22日
    浏览(41)
  • ECMAScript6历史-前端开发+ECMAScript+基础语法+入门教程

    我们首先来看 ECMA 是什么。 ECMA ,读音类似“埃科妈”,是 欧洲计算机制造商协会 (European Computer Manufacturers Association)的简称,是一家国际性会员制度的信息和电信标准组织。1994年之后,由于组织的标准牵涉到很多其他国家,为了体现其国际性,更名为 Ecma 国际 (Ecma In

    2024年01月16日
    浏览(47)
  • 【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用

    🐚 作者: 阿伟 💂 个人主页: Flyme awei 🐋 希望大家多多支持😘一起进步呀! 💬 文章对你有帮助👉关注✨点赞👍收藏📂 第一种: var 数组名 = new Array(); 创建一个空数组 第二种: var arr2 = new Array(10); 创建一个定长为10的数组 第三种 var arr3 = new Array(a,b,c); 创建时直接指定元素值

    2023年04月08日
    浏览(59)
  • JavaScript:js数组/对象遍历方法

    一、js遍历方法 序号 方法 描述 1 for 使用最基本的for循环可以遍历数组 2 for of for...of语句用来遍历可迭代对象(包括数组、Set、Map、字符串等),它可以替代传统的for循环和forEach()方法。for...of循环每次迭代都将返回一个值,而不是索引。 3 for in for...in语句用来遍历对象的可

    2024年02月09日
    浏览(55)
  • 掌握 JavaScript:从初学者到高级开发者的完整指南之JavaScript对象(二)

    可以大体分页3大类: 第一类:基本对象,我们主要学习Array和JSON和String 第二类:BOM对象,主要是和浏览器相关的几个对象 第三类:DOM对象,JavaScript中将html的每一个标签都封装成一个对象 1.1.1 基本对象 1.1.1.1 Array对象 语法格式 Array对象时用来定义数组的。常用语法格式有如下

    2024年02月07日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包