在javascript中按子数组属性值对对象数组排序

在javascript中按子数组属性值对对象数组排序,javascript,arrays,sorting,sub-array,Javascript,Arrays,Sorting,Sub Array,我有一个JavaScript对象数组: var people = [ { "name": "Edward", "age": 100, "wallet": { "location": "home", "cash": 500 }, "bank": { "location": "bank street", "cash": 22100 } }, { "name": "Lisa",

我有一个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
    }
}
];
我怎样才能按钱包、现金分类呢

如果我想按名称或年龄对这些对象进行排序,下面的示例(由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("wallet.cash"));

提前谢谢你

从提升此比较功能,您可以执行以下操作:

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));
功能比较(a、b){
如果(a.wallet.cashb.wallet.cash)
返回1;
返回0;
}
var people=[…];
console.log(people.sort(compare));

您可以将两个不同的参数传递给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;
}
}
演示

var-people=[
{
“姓名”:“爱德华”,
“年龄”:100岁,
“钱包”:{
“地点”:“家”,
“现金”:500
},
“银行”:{
“位置”:“银行街”,
“现金”:22100
}
},
{
“姓名”:“丽莎”,
“年龄”:30岁,
“钱包”:{
“地点”:“家”,
“现金”:20
},
“银行”:{
“位置”:“银行街”,
“现金”:12340
}
},
{
“姓名”:“伊丽莎白”,
“年龄”:50岁,
“钱包”:{
“地点”:“家”,
“现金”:200
},
“银行”:{
“位置”:“银行街”,
“现金”:5000
}
}
];
函数dynamicSort(属性1、属性2){
var-sortOrder=1;
如果(属性1[0]=“-”){
sortOrder=-1;
property1=property1.substr(1);
}
返回函数(a,b){
var结果=(a[property1][property2]b[property1][property2])1:0;
返回结果*排序器;
}
}

alert(JSON.stringify(people.sort(dynamicSort(“wallet”、“cash”))))
您可以从中使用
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;
    }
}
函数dynamicSort(属性){
var-sortOrder=1;
如果(属性[0]=“-”){
sortOrder=-1;
property=property.substr(1);
}
返回函数(a,b){
var avalue=Object.byString(a,属性);
var bvalue=Object.byString(b,属性);
var结果=(avaluebvalue)?1:0;
返回结果*排序器;
}
}

谢谢你,伙计!这正是我要找的。但是,第一个代码部分缺少property->property1更改。
dynamicSort("wallet","cash");
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;
    }
}