如何根据javascript对象的属性对其进行排序,并指定属性
How to sort javascript objects based on their properties, specifying the property
在SO上有很多类似问题的答案,它们都描述了如何实现自定义排序函数来对javascript对象数组进行排序。
然而,我想知道是否有可能实现一个更抽象的自定义排序,允许我传递我想要排序的对象的属性名称。这可能会使我不必一次又一次地实现非常相似的函数。
如果我有一个对象构造函数,像
function Car(mph, cc) {
this.maxSpeed = mph;
this.engineSize = cc;
}
,而不是实现两个排序函数:
function sortCarsOnMaxSpeed(a, b) { return a.maxSpeed - b.maxSpeed; }
function sortCarsOnEngineSize(a, b) { return a.engineSize - b.engineSize; }
我可以有一些泛型函数,比如:
function sortObjectsOnProperty(a, b, property) {
return a[property] - b[property];
}
,但自定义排序似乎只接受2个参数。
有什么建议吗?
许多谢谢。您需要编写一个接受属性名并返回比较器的函数:
function createComparator(property) {
return function(a, b) {
return a[property] - b[property];
};
}
你可以这样使用:
arr.sort(createComparator("maxSpeed"));
sort
接受一个函数,该函数可以是匿名的:
sort(array, function(a, b) { return a.maxSpeed - b.maxSpeed; });
如果你真的不需要这个,你可以定义一个sortObjectsOnProperty()函数,它返回一个排序回调,像这样:
function sortObjectsOnProperty(name) {
return function(a, b) { return a[name] - b[name]; }
}
相关文章:
- jQuery TinySort按数据属性排序和放置
- AngularJS使用对象属性排序多个对象数组
- JavaScript 中的对象属性排序
- 类型错误: 无法读取未定义的属性“排序级别”
- 按属性排序的 Javascript 对象数组不起作用
- 更改按自定义属性排序的对象数组的顺序
- JS mongoDB按previousItem属性排序(父子关系)
- 按ember.js对象控制器中的属性排序
- 按angularJS中的动态属性排序
- 在按导航属性排序时,breezejs:inlineCount不正确
- 按对象属性排序javascript数组
- 如何使用比较器按多个属性排序
- 基于任意长度的属性排序JavaScript对象数组
- 使用javascript按不同属性排序
- Jquery:按内部元素's属性排序
- 在Immutable.js的Map中,按子对象的属性排序的正确方法是什么?
- 基于日期属性排序javascript对象
- 使用NodeJS通过属性排序嵌套JSON
- 按类属性排序对象的树结构
- 使用jQuery UI Sortable交换数据属性排序