我有一个JavaScript对象数组:
var people = [
{
"name": "Edward",
"age": 100,
"wallet": {
"location": "home",
"cash": 500
},
"bank": {
"location": "bank street",
"cash": 22100
}
},
{
"name": "Lisa",
"age": 30,
"wallet": {
"location": "home",
"cash": 20
},
"bank": {
"location": "bank street",
"cash": 12340
}
},
{
"name": "Elisabeth",
"age": 50,
"wallet": {
"location": "home",
"cash": 200
},
"bank": {
"location": "bank street",
"cash": 5000
}
}
];
如何通过wallet.cash对它们进行排序?
以下示例(由EgeÖzcan提供)如果我想按名称或年龄对这些对象进行排序,则可以正常工作,但我很难修改它以使用多维密钥。
function dynamicSort(property) {
var sortOrder = 1;
if(property[0] === "-") {
sortOrder = -1;
property = property.substr(1);
}
return function (a,b) {
var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
return result * sortOrder;
}
}
这有效:
people.sort(dynamicSort("name"));
这不是:
people.sort(dynamicSort("wallet.cash"));
提前谢谢!
答案 0 :(得分:0)
从here解除此比较功能,你可以这样做:
function compare(a,b) {
if (a.wallet.cash < b.wallet.cash)
return -1;
if (a.wallet.cash > b.wallet.cash)
return 1;
return 0;
}
var people = [...];
console.log(people.sort(compare));
答案 1 :(得分:0)
您可以将两个不同的参数传递给dynamicSort函数
function dynamicSort(property1,property2) {
var sortOrder = 1;
if(property1[0] === "-") {
sortOrder = -1;
property1 = property1.substr(1);
}
return function (a,b) {
var result = (a[property1][property2] < b[property1][property2]) ? -1 : (a[property1][property2] > b[property1][property2]) ? 1 : 0;
return result * sortOrder;
}
}
然后致电
dynamicSort("wallet","cash");
<强>样本强>
var people = [
{
"name": "Edward",
"age": 100,
"wallet": {
"location": "home",
"cash": 500
},
"bank": {
"location": "bank street",
"cash": 22100
}
},
{
"name": "Lisa",
"age": 30,
"wallet": {
"location": "home",
"cash": 20
},
"bank": {
"location": "bank street",
"cash": 12340
}
},
{
"name": "Elisabeth",
"age": 50,
"wallet": {
"location": "home",
"cash": 200
},
"bank": {
"location": "bank street",
"cash": 5000
}
}
];
function dynamicSort(property1,property2) {
var sortOrder = 1;
if(property1[0] === "-") {
sortOrder = -1;
property1 = property1.substr(1);
}
return function (a,b) {
var result = (a[property1][property2] < b[property1][property2]) ? -1 : (a[property1][property2] > b[property1][property2]) ? 1 : 0;
return result * sortOrder;
}
}
alert(JSON.stringify(people.sort(dynamicSort("wallet","cash"))))
&#13;
答案 2 :(得分:0)
您可以使用this stackoverflow answer中的Object.byString
方法并修改您的代码:
function dynamicSort(property) {
var sortOrder = 1;
if(property[0] === "-") {
sortOrder = -1;
property = property.substr(1);
}
return function (a,b) {
var avalue = Object.byString(a, property);
var bvalue = Object.byString(b, property);
var result = (avalue < bvalue) ? -1 : (avalue > bvalue) ? 1 : 0;
return result * sortOrder;
}
}