javascript数组对象排序

javascript数组对象排序

JavaScript数组内置排序函数

javascript内置的sort函数是多种排序算法的集合

JavaScript实现多维数组、对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序。

sort() 方法用于对数组的元素进行排序。语法如下:
   ArrayObject.sort(order);
  测试A:
        var mm=[1,4,0,6,3,1,2];
mm.sort();
alert(mm);//0 1 1 2 3 4 6 

返回值为对数组的引用。请注意,数组在原数组上进行排序,不生成副本。

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

    若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    若 a 等于 b,则返回 0。a,b视为相等
    若 a 大于 b,则返回一个大于 0 的值。b应该排在a的后面

测试B:
function NumAscSort(a,b)
{
    return a-b;
}
function NumDescSort(a,b)
{
    return b-a;
}
var arr = new Array( 1, 2, 3, 4);
arr.sort(NumDescSort);
alert(arr);//4 3 2 1
arr.sort(NumAscSort);
alert(arr);// 1 2 3 4
比较字符数组
测试C:
var myarray=["Apple", "Banana", "Orange"]
myarray.sort()
alert(myarray);//Apple  Banana  Orange
数组直接调用sort()后,数组按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序
对于对象数组排序,我们先写一个构造比较函数的函数

//by函数接受一个成员名字符串做为参数
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数
var by = function(name)
{
return function(o, p)
{
var a, b;
if (typeof o === "object" && typeof p === "object" && o && p)
{
a = o[name];
b = p[name];
if (a === b) {return 0;}
if (typeof a === typeof b) { return a < b ? -1 : 1;}
return typeof a < typeof b ? -1 : 1;
}
else {throw ("error"); }
}
}
var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
employees.sort(by("age"));
alert(employees);

到这里,对象数组排序就算基本实现了。那如何实现多个键值排序呢?意思就是先是对age排序,如果age相同,再比较name。

这时,我们可以进一步修改by函数,让其可以接受第二个参数,当主要的键值产生一个匹配的时候,另一个compare方法将被调用以决出高下。

//by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数
//当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下

var by = function(name,minor)
{
return function(o, p)
{
var a, b;
if (typeof o === "object" && typeof p === "object" && o && p)
{
a = o[name];
b = p[name];
if (a === b) {return typeof minor===‘function‘ ?minor(o,p):0;}
if (typeof a === typeof b) { return a < b ? -1 : 1;}
return typeof a < typeof b ? -1 : 1;
}
else {throw ("error"); }
}
}
var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
employees.sort(by(‘age‘,by(‘name‘)));
alert(employees);

// 自己测试

// 数组对象排序
function jsonObjSort(o, p) {
    var a, b;
    if (typeof o === "object" && typeof p === "object" && o && p) {
        a = o.serialNum;
        b = p.serialNum;
        if (a === b) {
            return 0;
        }
        if (typeof a === typeof b) {
            return a < b ? -1 : 1;
        }
        return typeof a < typeof b ? -1 : 1;
    } else {
        throw ("error");
    }
}
var js;
var jsonObj = eval(jsonString);
jsonObj.sort(jsonObjSort);
时间: 2024-08-11 14:46:34

javascript数组对象排序的相关文章

javascript数组对象实例方法

javascript数组对象实例方法有:pop(),push(),reverse(),shift(),sort(),splice(),unshift(),concat(),join(),slice() pop() : 移除数组中最后一个元素,并返回该元素. 如下: var a=[1,2,3] ; console.log(a.pop()); // 输出 3 console.log(a); //输出 [1,2] push() : 向数组尾部添加元素,并返回该数组的大小.如下: var a =[1,2

js中的数组对象排序

一.普通数组排序 js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: var arr = ["a", "b", "A", "B"]; arr.sort(); console.log(arr);//["A", "B", "a", "b"

JQuery $.each遍历JavaScript数组对象实例

查看一个简单的jQuery的例子来遍历一个JavaScript数组对象. var json = [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana&q

js中的数组对象排序(方法sort()详细介绍)

定义和用法 sort() 方法用于对数组的元素进行排序. 语法    arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意,数组在原数组上进行排序,不生成副本. 普通数组排序: js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: 字母A.B的ASCII值分别为65.66,而a.b的值分别为97.98,所

使用vue实现数组对象排序

从网上找到的例子用vue来实现数组对象排序 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-U

JavaScript数组对象的声明与使用

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>数组对象的声明与使用</title> </head> <body> <script typ

Javascript数组(一)排序

一.简介首先,我们来看一下JS中sort()和reverse()这两个函数的函数吧reverse();这个函数是用来进行倒序,这个没有什么可说的,所谓倒序就是大的在前面,小的在后面. 比如: var array1 = [0,1,5,10,15]; array1.reverse();//结果为:15,10,5,1,0 sort([参数]);这个函数是用来对数组进行正序排列的, var array1 = [0,1,5,10,15]; array1.sort();//结果为:0,1,10,15,5 注

了解JavaScript 数组对象及其方法

数组在我目前学习过的编程语言中都可以见到, 形形色色的方法也数不胜数, 不过功能都一样, 最多也就是方法名稍稍有所不同, 老外也没个准啊, 如果英语比较好的同学对于学习方法(method)来说是很快的, 因为基本都可以翻译出来, 不过也要勤加锻炼, 总体来说, 英语水平不怎么影响编程技术, 看看API的话, 认识点简单的词汇, 就差不多了. 数组对象 文中一再的把数组和对象一起说, 是因为数组具有对象的一切特性, 更准确的说数组属于一类对象, 一类继承自Array.prototype的对象, 所

javascript数组对象操作,location对象操作

Array 对象属性 FF: Firefox, IE: Internet Explorer 属性 描述 FF IE constructor 返回对创建此对象的数组函数的引用. 1 4 index   1 4 input   1 4 length 设置或返回数组中元素的数目. 1 4 prototype 使您有能力向对象添加属性和方法. 1 4 Array 对象方法 FF: Firefox, IE: Internet Explorer 方法 描述 FF IE concat() 连接两个或更多的数组