下面的函数将允许您对一个包含对象的数组根据一个或多个属性进行排序,可以在每个属性上按升序(默认)或降序进行排序,并允许您选择是否执行区分大小写的比较。默认情况下,此函数执行不区分大小写的排序。
第一个参数必须是包含对象的数组。
随后的参数必须是用逗号分隔的字符串列表,引用要按其排序的不同对象属性。最后一个参数(可选)是一个布尔值,用于选择是否执行区分大小写的排序-对于区分大小写的排序,请使用true。
该函数默认按升序对每个属性/键进行排序。如果要对特定的键进行降序排序,则传入格式为[“property_name”,true]的数组。
以下是一些函数的示例用法,后面是说明(其中homes是包含对象的数组):
objSort(homes,“city”) - > 按城市排序(升序,不区分大小写)
objSort(homes,['city',true]) - > 按城市排序(降序,不区分大小写)
objSort(homes,“city”,true) - > 先按城市排序,然后按价格排序(升序,区分大小写)
objSort(homes,“city”,“price”) - > 先按城市排序,然后按价格排序(都是升序,不区分大小写)
objSort(homes,“city”,[“price”,true]) - > 先按城市排序(升序),然后按价格排序(降序,不区分大小写)
没有更多的话要说了,这就是函数:
function objSort() {
var args = arguments,
array = args[0],
case_sensitive, keys_length, key, desc, a, b, i;
if (typeof arguments[arguments.length - 1] === 'boolean') {
case_sensitive = arguments[arguments.length - 1];
keys_length = arguments.length - 1;
} else {
case_sensitive = false;
keys_length = arguments.length;
}
return array.sort(function (obj1, obj2) {
for (i = 1; i < keys_length; i++) {
key = args[i];
if (typeof key !== 'string') {
desc = key[1];
key = key[0];
a = obj1[args[i][0]];
b = obj2[args[i][0]];
} else {
desc = false;
a = obj1[args[i]];
b = obj2[args[i]];
}
if (case_sensitive === false && typeof a === 'string') {
a = a.toLowerCase();
b = b.toLowerCase();
}
if (! desc) {
if (a < b) return -1;
if (a > b) return 1;
} else {
if (a > b) return -1;
if (a < b) return 1;
}
}
return 0;
});
}
这里是一些示例数据:
var homes = [{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": 162500
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": 1000000
}, {
"h_id": "5",
"city": "new york",
"state": "NY",
"zip": "00010",
"price": 1000000
}, {
"h_id": "6",
"city": "Dallas",
"state": "TX",
"zip": "85000",
"price": 300000
}, {
"h_id": "7",
"city": "New York",
"state": "NY",
"zip": "00020",
"price": 345000
}];
sort(["first-field", "ASC"], ["second-field", "DSC"]);
。当我尝试添加第一个答案的“primer”逻辑以处理日期、大小写不敏感等时,这变得更加复杂。 - Mikehomes.sort((a, b) =>
…)
,其中a.prop
和b.prop
。a.prop - b.prop
数值排序,a.prop.localeCompare(b.prop)
字典序排序,(b.prop < a.prop) - (a.prop < b.prop)
通用排序。要按降序排序而不是升序,请取反返回值(例如,使用b.prop - a.prop
而不是a.prop - b.prop
)。 - Sebastian Simon