首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据数组的一个属性按字母顺序对数组中的对象进行排序

根据数组的一个属性按字母顺序对数组中的对象进行排序
EN

Stack Overflow用户
提问于 2012-01-18 03:45:47
回答 13查看 244K关注 0票数 258

假设您有一个JavaScript类,如下所示

代码语言:javascript
复制
var DepartmentFactory = function(data) {
    this.id = data.Id;
    this.name = data.DepartmentName;
    this.active = data.Active;
}

假设您随后创建了该类的许多实例,并将它们存储在一个数组中

代码语言:javascript
复制
var objArray = [];
objArray.push(DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));

所以我现在有了一个由DepartmentFactory创建的对象数组。如何使用array.sort()方法按照每个对象的DepartmentName属性对这个对象数组进行排序?

对字符串数组进行排序时,array.sort()方法工作得很好

代码语言:javascript
复制
var myarray=["Bob", "Bully", "Amy"];
myarray.sort(); //Array now becomes ["Amy", "Bob", "Bully"]

但是我如何让它与对象列表一起工作呢?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2012-01-18 03:52:49

你必须这样做:

代码语言:javascript
复制
objArray.sort(function(a, b) {
    var textA = a.DepartmentName.toUpperCase();
    var textB = b.DepartmentName.toUpperCase();
    return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
});

注意:更改大小写(大写或小写)可确保排序不区分大小写。

票数 434
EN

Stack Overflow用户

发布于 2012-01-18 04:02:07

支持unicode的步骤:

代码语言:javascript
复制
objArray.sort(function(a, b) {
   return a.DepartmentName.localeCompare(b.DepartmentName);
});
票数 205
EN

Stack Overflow用户

发布于 2020-08-21 22:42:57

使用ES6缩短代码

代码语言:javascript
复制
objArray.sort((a, b) => a.DepartmentName.toLowerCase().localeCompare(b.DepartmentName.toLowerCase()))
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8900732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档