建议11:增强数组排序的sort功能

  sort方法不仅按字母顺序进行排序,还可以根据其他顺序执行操作.这时就必须为方法提供一个比较函数的参数,该函数要比较两个值,然后返回一个用于说明这两个值得相对顺序的数字.比较函数应该具有两个参数a和b,其返回值如下:

  1. 如果根据自定义评判标准,a小于b,在排序后的数组中a应该出现在b之前,就返回一个小于0的值
  2. 如果a等于b,就返回0
  3. 如果a大于b,就返回一个大于0的值

  下面的示例中,将根据比较函数来比较数组中每个元素的大小,并按从小到大顺序排序

function f(a,b){
  return (a-b)
}
var a = [4,3,5,6,7,3,6,8]
a.sort(f)
console.log(a); //[3, 3, 4, 5, 6, 6, 7, 8]

如果是从大到小,则让返回值取反就好

function f(a,b){
  return -(a-b)
}
var a = [4,3,5,6,7,3,6,8]
a.sort(f)
console.log(a);  //[8, 7, 6, 6, 5, 4, 3, 3]

(1) 根据奇偶性值排列数组

  sort方法用法比较灵活,但更灵活的是对比较函数的设计.例如:要根据奇偶数顺序排列数组,只需要判断比较函数中两个参数是否为奇偶数,并决定排列顺序

function f(a,b){
  var a = a%2
  var b = b%2
  if(a==0) return 1
  if(b==0) return -1
}

var a = [3,1,2,4,5,7,6,8,0,9]
a.sort(f)
console.log(a);  //[3, 1, 5, 7, 9, 0, 8, 6, 4, 2]

  sort方法在调用比较函数时,将每个元素值传递给比较函数,如果元素值为偶数,则保留其位置不动,如果元素值为奇数,则调换参数a和b的显示顺序,从而实现数组中所有元素执行奇偶排序.

(2) 不区分大小写排序字符串

如果不希望区分字母大小,也就是说大写字母和小写字母按相同顺序排列

function f(a,b){
  var a = a.toLowerCase;
  var b= b.toLowerCase;
  if(a<b){
    return 1
  }else{
    return -1
  }
}
var  a = [‘aB‘,‘Ab‘,‘Ba‘,‘bA‘]
a.sort(f)
console.log(a);  // ["aB", "Ab", "Ba", "bA"]

(3) 把浮点数和整数分开排列

function f(a,b){
  if(a>Math.floor(a)){
    return 1
  }
  if(b>Math.floor(b)){
    return -1
  }
}

var a  = [3.555,3,2.111,5,7,3]
a.sort(f)
console.log(a);  //[3, 5, 7, 3, 2.111, 3.555]

原文地址:https://www.cnblogs.com/chorkiu/p/12092771.html

时间: 2024-10-07 09:14:14

建议11:增强数组排序的sort功能的相关文章

编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议11~15)

建议11:养成良好习惯,显示声明UID 我们编写一个实现了Serializable接口(序列化标志接口)的类,Eclipse马上就会给一个黄色警告:需要添加一个Serial Version ID.为什么要增加?他是怎么计算出来的?有什么用?下面就来解释该问题. 类实现Serializable接口的目的是为了可持久化,比如网络传输或本地存储,为系统的分布和异构部署提供先决条件支持.若没有序列化,现在我们熟悉的远程调用.对象数据库都不可能存在,我们来看一个简单的序列化类: 1 import java

编写高质量代码改善C#程序的157个建议——建议11: 区别对待==和Equals

建议11: 区别对待==和Equals 在开始本建议之前,首先要明确概念“相等性”.CLR中将“相等性”分为两类:“值相等性”和“引用相等性”.如果用来比较的两个变量所包含的数值相等,那么将其定义为“值相等性”:如果比较的两个变量引用的是内存中的同一个对象,那么将其定义为“引用相等性”. 无论是操作符“==”还是方法“Equals”,都倾向于表达这样一个原则: 对于值类型,如果类型的值相等,就应该返回True. 对于引用类型,如果类型指向同一个对象,则返回True. 下面的代码输出所遵循的就是以

自己实现简单的AOP(三) 实现增强四项基本功能

前面的两篇随笔,都是只是个铺垫,真正实现增强四项基本功能的重头戏,在本篇随笔中, 本文将通过AOP实现如下的四个基本功能: /// <para>1.自动管理数据库连接[可选]</para>/// <para>2.自动管理数据库事务,当接收到异常后(无论什么异常)事务将自动回滚[可选]</para>/// <para>3.服务级加锁[必选]</para>/// <para>4.以统一方式处理 服务异常 及 错误, 包括数据库

Oracle 12c中增强的PL/SQL功能

英文链接:http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53plsql-1999801.html Oracle 12c增强了一系列定义和执行PL/SQL程序单元的方式.本文覆盖了Oracle 12c几个新特性: 1.为结果缓存条件优化了调用者权限函数 2.可以在SQL语句中定义和执行PL/SQL函数 3.通过ACCESSIBLE BY条件指定一个白名单来限制程序单元的访问 4.可直接授权角色给指定程序单元 调用者权限和P

js中的数组排序函数sort()和reverse()

对列表进行排序一般都由后台来完成,但如果列表项不多无需分布的话也可以用JS完成,要使用JS排序自然也就想到sort()方法和reverse()方法,这两函数在JS中使用得比较多大家也许比较熟悉,但对于刚接触这两函数的初学者还是需要注意几点. sort() 方法用于对数组的元素进行正序排列 reverse();方法用于对数组的元素进行倒序排列,这个没有什么可说的,所谓倒序就是大的在前面,小的在后面 例: 1 var array = [0,1,5,10,15]; 2 document.write(

Taurus.MVC 2.3 开源发布:增强属性Require验证功能,自带WebAPI文档生成功能

背景: 上周,把 Taurus.MVC 在 Linux (CentOS7) 上部署任务完成后. 也不知怎么的,忽然就想给框架集成一下WebAPI文档功能,所以就动手了. 以为一天能搞完,结果,好几天过去了. 本来还想集成自动化批量执行测试功能,不过想想还是放到下一版本实现吧. 感觉差不多了,就先和大伙分享一下: Taurus.MVC Nuget 更新: 昨夜,Nuget的Package升级了一下,和源码版本做了下同步. 通常源码的版本都会比Nuget包的靠前一个小版本: 目前:Taurus.MV

数组排序方法sort

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>数组排序</title></head><body><script>// reverse()对数组内容进行反转//eg:[1,2,,3,4,5]变成[5,4,3,2,1]// sort()默认情况下按照升序排列数组项,即最小值在

Js 数组排序函数sort()

最近看到一个js函数sort()觉得挺有意思,写在这里与大家分享.如果有什么地方不对或者有更好的写法,也请大家不吝赐教. sort()返回一个元素已经进行了排序的 Array 对象. 1. 按字母排序 直接使用sort()函数,默认按字母顺序排. var arr = new Array("dd", "aa", "bb", "cc"); arr.sort(); 此时返回结果排序为  "aa", "b

PHP 数组排序函数sort,rsort,ksort,krsort,asort,arsort区别

一.概念:    1.自然排序法:即按自然数的大小排序,例如“10>2”;    2.计算机标准排序法:是以逐个字符比较,排序,例如“2>10”(因为第一位2>1):    3.数值数组:带有数字 ID 键的数组:    4.关联数组:带有指定的键的数组,每个键关联一个值.    5.默认的排序为按键值升序排序,排序方式为自然排序. 二.[帮助理解] 1.a(association)前缀表示以键值关联排序: 2.k(key)前缀表示以键名关联排序: 3.r(reverse)前缀表示以反方