JavaScript对象数组如何按指定属性和排序方

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript对象数组如何按指定属性和排序方相关的知识,希望对你有一定的参考价值。

function sortNumber(a,b)

return a.number - b.number;//按印数排名

function element(name,number)//name为书名,number是什么印数
this.name=name;
this.number=number;
this.toString=function()//关键要重写toString,返回书名
return this.name;


var arr = new Array(3)
arr[0] = new element("x",2000)
arr[1] = new element("y",1000)
arr[2] = new element("z",3000)
document.write(arr.sort(sortNumber))
参考技术A
//按照name排序。
var arr =  [id:1,name:'dbc',id:2,name:'cac',id:3,name:'cab'];

var c = arr.sort(function(a,b)
    return a.name >b.name;
);

// [ id: 3, name: 'cab' , id: 2, name: 'cac' , id: 1, name: 'dbc'  ]

按对象属性对 javascript 对象数组进行排序

【中文标题】按对象属性对 javascript 对象数组进行排序【英文标题】:Sort a javascript array of objects by object property 【发布时间】:2012-11-02 06:39:02 【问题描述】:

我正在尝试对数组进行排序。例如,给定数组 a(如下),我想返回数组 b。

我知道我可以做到a.sort(),但是,我不想对实际的数组元素进行排序,而是对数组元素的一个属性(本例中为s)进行排序。这如何实现?

谢谢

var a=[
  s:"ced",o:obj:1,
  s:"cde",o:obj:2,
  s:"ade",o:obj:3,
  s:"bde",o:obj:4
]

var b=[
  s:"ade",o:obj:3,
  s:"bde",o:obj:4,
  s:"cde",o:obj:2,
  s:"ced",o:obj:1
]

【问题讨论】:

重复:here 和 here 【参考方案1】:

Array.prototype.sort 接受一个可选参数:一个告诉它如何排序的回调。

a.sort(function(x,y) 
    // do something here
    // return -1 if x < y
    // return  1 if x > y
    // otherwise, return 0
);

所以,在你的情况下,它会是:

a.sort(function(x,y) return x.s == y.s ? 0 : (x.s < y.s ? -1 : 1););

【讨论】:

感谢 Kolink。 x 和 y 是什么?例如,x 是当前项目,y 是最高还是最低? 它们是数组中的两个项目,由sort 函数选取,以尝试计算它们进入的顺序。例如,如果输入数组是[2,3,1],那么它可能会询问“ 2 和 3 的顺序是什么?”...“那么 2 和 1 呢?”...在“好的,我知道了,它是 [1,2,3]”之前。关键是你不需要知道它们是哪些项,你只需要知道它们是两个项目,并且系统会询问你如何比较它们。【参考方案2】:
a.sort(function(a, b)
    if(a.s < b.s)
        return -1;
    
    if(a.s > b.s)
        return 1;
    
    return 0;
);

http://jsfiddle.net/lbstr/nCKpG/

【讨论】:

【参考方案3】:

sort 方法接受 compareFunction 参数,您可以在其中定义如何计算排序顺序。 当你想比较字符串时,这个函数应该使用localeCompare,正如建议的here。 创建可以快速调整的排序函数的一种方法是通过另一个函数生成它。这意味着您可以为对象的任何属性自动创建排序函数。 把两者放在一起,你就得到了..

function genSortFn(prop)
    return function(a,b) return a[prop].localeCompare( b[prop] ); ;

a.sort( genSortFn('s') );
b.sort( genSortFn('s') );

【讨论】:

以上是关于JavaScript对象数组如何按指定属性和排序方的主要内容,如果未能解决你的问题,请参考以下文章

按对象属性对 javascript 对象数组进行排序

Javascript - 如何按 3 种不同的属性类型对对象数组进行排序? (字符串、整数、布尔值)

按对象属性对 javascript 对象数组进行排序

javascript 按对象属性对对象数组进行排序

JavaScript实现对象数组按不同字段排序

如何使用jquery或javascript对对象数组进行排序[重复]