首页 > 其他分享 >js数组sort()方法按指定顺序排序

js数组sort()方法按指定顺序排序

时间:2022-09-19 11:47:40浏览次数:73  
标签:sort 顺序 name js 数组 排序 tableData

一、sort介绍

数组的sort()方法可以把数组排序,

不传参数的默认按字典排序 sort()方法还接受一个回调函数,

按回调函数内代码逻辑排序 该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

比较函数应该具有两个参数 a 和 b,分别获取数组中前后相邻的两个数据。

若在排序后的数组中 a 应该出现在 b 之前,则返回一个小于等于 0 的值。也就是顺序不变。

若在排序后的数组中 a 应该出现在 b 之后,则返回一个大于 0 的值。也就是a,b交换位置。

let arr = [1,0,3,4,5]
arr = arr.sort((a,b) => a-b)

那么,arr就会按升序排列。

二、sort排序方法的灵活使用

除了默认不穿参数的按字典排序,还有直接相减的从小到大排序。还有几种比较好玩有用的排序。

1、按指定顺序排列。

例子:

let order = ['论坛','微信','微博']
let tableData=[{name:'微博',source:'weibo'},{name:'微信',source:'weixin'},{name:'论坛',source:'luntan'}]
tableData = tableData.sort((a, b) => {
return order.indexOf(a.name) - order.indexOf(b.name)
})
console.log(tableData)

 

 可以看到,这个排列顺序就是指定数组的顺序,可以用来整理数据。

例子中时是最理想的情况,指定数组与排序数组的长度相等,且每一项都存在。如果长度不等或缺失,还可以加一些逻辑判断,比如,不存在的时候indexOf的值一定是-1,必然交换顺序。或者指定数组包含全部情况,而排序数组只是其中一部分。

2、随机排列

随机的逻辑很简单,用Math.random()去生成随机数,决定是否要换位。可以用来打乱顺序。

let tableData=[1,2,3,4,5,6,7,8,9]
tableData = tableData.sort((a, b) => {
return Math.random() -0.5
})
console.log(tableData)

 

 可以看到两次输出结果是不一样的。

标签:sort,顺序,name,js,数组,排序,tableData
From: https://www.cnblogs.com/MingYX/p/16707111.html

相关文章

  • Node.js(四)json
    npminit-y(初始化项目)npminstallexpress(引入express)npxexpress-generator-e(自动生成模板。添加对ejs模板引擎的支持)npmi--savelodash(引入lodash) 路由配......
  • 《js 设计模式与开发实践》读书笔记 13
     职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 ......
  • 《js 设计模式与开发实践》读书笔记 14(完)
    在传统面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活,还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之改变;另......
  • JOSN.parse、JSON.stringify深拷贝数据丢失问题(使用JSON深拷贝有哪些弊端)
    一个数组添加属性,深拷贝之后添加的数据丢失当数组添加一个对象,这个对象是不可枚举属性,使用JSON进行深拷贝,会丢失这个属性使用JSON.parse(JSON.stringify())进行深拷贝......
  • DataTable中数据记录的排序,检索,合并,分页,统计(整理)(转)
    一、排序1获取DataTable的默认视图2对视图设置排序表达式3用排序后的视图导出的新DataTable替换就DataTable(Asc升序可省略,多列排序用","隔开)DataViewdv=dt.Default......
  • 1636. 按照频率将数组升序排序【模拟】
    题目给你一个整数数组nums,请你将数组按照每个值的频率升序排序。如果有多个值的频率相同,请你按照数值本身将它们降序排序。请你返回排序后的数组。难度:简单提示:......
  • Js手写面试题第三天
    前言❓有任何疑问都可以私信我解答⚡仓库地址:​https://gitee.com/super_li_yu/jsexamdemo......
  • springboot中解析JSON参数
    解析psot请求中的JSON参数Map<String,String>attrMap=newHashMap<String,String>();BufferedReaderstreamReader=null;try{streamReader=newBufferedRead......
  • Node.js(二)express
    npminit-y(初始化项目)npminstallexpress(引入express)npxexpress-generator-e(自动生成模板。添加对ejs模板引擎的支持)app.jsconstexpress=require("express......
  • 034每个进程占用内存排序
    一、  #ps-aux|head-n2  USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND  root10.00.019633213704?......