jda*_*vis 174 javascript
假设你有一个像这样的javascript类
var DepartmentFactory = function(data) {
this.id = data.Id;
this.name = data.DepartmentName;
this.active = data.Active;
}
Run Code Online (Sandbox Code Playgroud)
假设您创建了该类的多个实例并将它们存储在一个数组中
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}));
Run Code Online (Sandbox Code Playgroud)
所以我现在将创建一个由对象创建的对象数组DepartmentFactory.我如何使用该array.sort()方法按DepartmentName每个对象的属性对这个对象数组进行排序?
array.sort()排序字符串数组时,该方法可以正常工作
var myarray=["Bob", "Bully", "Amy"];
myarray.sort(); //Array now becomes ["Amy", "Bob", "Bully"]
Run Code Online (Sandbox Code Playgroud)
但是如何使它与对象列表一起使用?
Ome*_*ari 300
你必须做这样的事情:
objArray.sort(function(a, b) {
var textA = a.DepartmentName.toUpperCase();
var textB = b.DepartmentName.toUpperCase();
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
});
Run Code Online (Sandbox Code Playgroud)
注意:更改大小写(向上或向下)可确保不区分大小写的排序.
ron*_*mbe 137
支持unicode:
objArray.sort(function(a, b) {
return a.DepartmentName.localeCompare(b.DepartmentName);
});
Run Code Online (Sandbox Code Playgroud)
Nei*_*eil 14
objArray.sort((a, b) => a.DepartmentName.localeCompare(b.DepartmentName))
Run Code Online (Sandbox Code Playgroud)
小智 13
使用 ES6 缩短代码
objArray.sort((a, b) => a.DepartmentName.toLowerCase().localeCompare(b.DepartmentName.toLowerCase()))
Run Code Online (Sandbox Code Playgroud)
Dio*_*ode 12
var DepartmentFactory = function(data) {
this.id = data.Id;
this.name = data.DepartmentName;
this.active = data.Active;
}
// use `new DepartmentFactory` as given below. `new` is imporatant
var objArray = [];
objArray.push(new DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(new DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(new DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(new DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));
function sortOn(property){
return function(a, b){
if(a[property] < b[property]){
return -1;
}else if(a[property] > b[property]){
return 1;
}else{
return 0;
}
}
}
//objArray.sort(sortOn("id")); // because `this.id = data.Id;`
objArray.sort(sortOn("name")); // because `this.name = data.DepartmentName;`
console.log(objArray);
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/diode/hdgeH/
// Sorts an array of objects "in place". (Meaning that the original array will be modified and nothing gets returned.)
function sortOn (arr, prop) {
arr.sort (
function (a, b) {
if (a[prop] < b[prop]){
return -1;
} else if (a[prop] > b[prop]){
return 1;
} else {
return 0;
}
}
);
}
//Usage example:
var cars = [
{make:"AMC", model:"Pacer", year:1978},
{make:"Koenigsegg", model:"CCGT", year:2011},
{make:"Pagani", model:"Zonda", year:2006},
];
// ------- make -------
sortOn(cars, "make");
console.log(cars);
/* OUTPUT:
AMC : Pacer : 1978
Koenigsegg : CCGT : 2011
Pagani : Zonda : 2006
*/
// ------- model -------
sortOn(cars, "model");
console.log(cars);
/* OUTPUT:
Koenigsegg : CCGT : 2011
AMC : Pacer : 1978
Pagani : Zonda : 2006
*/
// ------- year -------
sortOn(cars, "year");
console.log(cars);
/* OUTPUT:
AMC : Pacer : 1978
Pagani : Zonda : 2006
Koenigsegg : CCGT : 2011
*/
Run Code Online (Sandbox Code Playgroud)
小智 7
objArray.sort( (a, b) => a.id.localeCompare(b.id, 'en', {'sensitivity': 'base'}));
Run Code Online (Sandbox Code Playgroud)
这会按字母顺序对它们进行排序,并且不区分大小写。它也超级干净且易于阅读:D
因为这里提供的所有解决方案都没有空/未定义的安全操作,所以我以这种方式处理(您可以根据需要处理空值):
ES5
objArray.sort(
function(a, b) {
var departmentNameA = a.DepartmentName ? a.DepartmentName : '';
var departmentNameB = b.DepartmentName ? b.DepartmentName : '';
return departmentNameA.localeCompare(departmentNameB);
}
);
Run Code Online (Sandbox Code Playgroud)
ES6+
objArray.sort(
(a: DepartmentFactory, b: DepartmentFactory): number => {
const departmentNameA = a.DepartmentName ? a.DepartmentName : '';
const departmentNameB = b.DepartmentName ? b.DepartmentName : '';
return departmentNameA.localeCompare(departmentNameB);
}
);
Run Code Online (Sandbox Code Playgroud)
我还删除了其他人使用的 toLowerCase,因为 localeCompare 不区分大小写。另外,我更喜欢在使用 Typescript 或 ES6+ 时对参数更加明确,以便对未来的开发人员来说更加明确。
var DepartmentFactory = function(data) {
this.id = data.Id;
this.name = data.DepartmentName;
this.active = data.Active;
}
var objArray = [];
objArray.push(new DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(new DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(new DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(new DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));
console.log(objArray.sort(function(a, b) { return a.name > b.name}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151458 次 |
| 最近记录: |