gpt4 book ai didi

javascript - 如何按关联数组值排序(复杂数组结构)?

转载 作者:行者123 更新时间:2023-12-03 11:46:19 25 4
gpt4 key购买 nike

考虑以下因素:

我在 HTML 表中表示数组中的数据,例如:

image of table

1) 如何按 b1b3 对数组进行排序?

我已经尝试过:

var o = {
"orgs": {
"655": {
"data": {
"cons": 30,
"b3ports": 0,
"b9": 2,
"b1": 25,
"b2": 14,
"b3": 10,
"ports": 0,
"rica": 30
},
"depth": 1,
"agents": [207072],
"orgunit_id": "TEAM00655",
"name": "TEAM00655: Jabba - Mooi River (Muhammad Jaffar)"
},
"853": {
"data": {
"cons": 356,
"b3ports": 1,
"b9": 8,
"b1": 283,
"b2": 122,
"b3": 77,
"ports": 1,
"rica": 356
},
"depth": 2,
"agents": [208162],
"orgunit_id": "TEAM00853",
"name": "TEAM00853: Jabba - Mooiriver (Bongiwe Gwala)"
},
"921": {
"data": {
"cons": 22,
"b3ports": 0,
"b9": 2,
"b1": 20,
"b2": 7,
"b3": 5,
"ports": 0,
"rica": 22
},
"depth": 1,
"agents": [210171, 212842],
"orgunit_id": "TEAM00921",
"name": "TEAM00921: Jabba - Nolwazi Zungu"
},
},
"agents": {
"207072": {
"name": "Bongiwe Gwala",
"oid": 655,
"depth": 1,
"aid": "A0207072",
"orgunit_id": "TEAM00655",
"data": {
"cons": 30,
"b3ports": 0,
"b9": 2,
"b1": 25,
"b2": 14,
"b3": 10,
"ports": 0,
"rica": 30
},
"aname": "A0207072: Bongiwe Gwala",
"oname": "TEAM00655: Jabba - Mooi River (Muhammad Jaffar)"
},
"208162": {
"name": "Nkosikhona MADLALA",
"oid": 853,
"depth": 2,
"aid": "A0208162",
"orgunit_id": "TEAM00853",
"data": {
"cons": 356,
"b3ports": 1,
"b9": 8,
"b1": 283,
"b2": 122,
"b3": 77,
"ports": 1,
"rica": 356
},
"aname": "A0208162: Nkosikhona MADLALA",
"oname": "TEAM00853: Jabba - Mooiriver (Bongiwe Gwala)"
},
"212842": {
"name": "SANELE KHUMALO",
"oid": 921,
"depth": 1,
"aid": "A0212842",
"orgunit_id": "TEAM00921",
"data": {
"cons": 22,
"b3ports": 0,
"b9": 2,
"b1": 20,
"b2": 7,
"b3": 5,
"ports": 0,
"rica": 22
},
"aname": "A0212842: SANELE KHUMALO",
"oname": "TEAM00921: Jabba - Nolwazi Zungu"
},
},
"orglist": [853, 655, 921],
}

function sort_data(data, sortby, asc) {
console.log(data);
if (asc == "asc") {
data.sort(function(a, b) {
a.sortby - b.sortby;
});
} else {
data.sort(function(a, b) {
a.sortby + b.sortby;
});
}
// update_data;
}

var a = sort_data(o, "b1", "asc");
console.log(a);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
但这给了我一个错误(要查看错误,请打开控制台)

<小时/>

更新:

多亏了@NicolasAlbert,我才得以进行排序。

现在我还需要通过代理商订购。它需要先按orgs订购,然后再按agents订购,我已经尝试过:

        if (asc == "desc") {
data.orglist.sort(function(a, b) {
a_org = data.orgs[a].data[sortby];
b_org = data.orgs[b].data[sortby];
a_agent = data.agents[a].data[sortby];
b_agent = data.agents[b].data[sortby];
// return d - c;
return b_org - a_org && a_agent - b_agent;

// data.agents[a].data[sortby] - data.agents[b].data[sortby]
});
} else {
data.orglist.sort(function(a, b) {
a_org = data.orgs[a].data[sortby];
b_org = data.orgs[b].data[sortby];
a_agent = data.agents[a].data[sortby];
b_agent = data.agents[b].data[sortby];
return a_org - b_org && a_agent - b_agent;
});
}

这无论如何行不通......

另一个更新

我修改了代码以执行以下操作:

            data.orglist.sort(function(a, b) {
a_org = data.orgs[a].data[sortby];
b_org = data.orgs[b].data[sortby];
agents = data.orgs[b].agents.sort(function(a, b){
a_agent = data.agents[a].data[sortby];
b_agent = data.agents[b].data[sortby];
return b_agent - a_agent
});

return b_org - a_org && agents;
});

但这会同时对组织代理进行排序。

<小时/>

最后更新:

我让它工作,对 orgsagents 进行排序,我必须创建两个排序函数:

    function sort_org(data, sortby, order) {
/*
Sort the orgs
*/
var a_org, b_org;

if (order == "desc") {
data.orglist.sort(function(a, b) {
a_org = data.orgs[a].data[sortby];
b_org = data.orgs[b].data[sortby];
return b_org - a_org;
});
} else {
data.orglist.sort(function(a, b) {
a_org = data.orgs[a].data[sortby];
b_org = data.orgs[b].data[sortby];
return a_org - b_org;
});
}
}

function sort_agent(data, sortby, order) {
/*
Sort the agents
*/
var a_agent, b_agent;

if (order == "desc") {
for (var orgid in data.orglist){
data.orgs[data.orglist[orgid]].agents.sort(function(a, b){
a_agent = data.agents[a].data[sortby];
b_agent = data.agents[b].data[sortby];
return b_agent - a_agent
})
}
} else {
for (var orgid in data.orglist){
data.orgs[data.orglist[orgid]].agents.sort(function(a, b){
a_agent = data.agents[a].data[sortby];
b_agent = data.agents[b].data[sortby];
return a_agent - b_agent
})
}
}
}

然后我就连续调用这些函数......即

sort_org(o, "b1", "asc");
sort_agent(o, "b1", "asc");

我希望这可以帮助别人......

最佳答案

您只能在 Array 实例上使用 .sort 方法,而不能在 Object 上使用。您的数据存储在键/值对象中,并且顺序无法修改。

如果你想对数据进行排序,你必须在其中引入Array ([])。

您可能希望像这样订购 orglist 数组:

var o = {
"orgs": {
"655": {
"data": {
"cons": 30,
"b3ports": 0,
"b9": 2,
"b1": 25,
"b2": 14,
"b3": 10,
"ports": 0,
"rica": 30
},
"depth": 1,
"agents": [207072],
"orgunit_id": "TEAM00655",
"name": "TEAM00655: Jabba - Mooi River (Muhammad Jaffar)"
},
"853": {
"data": {
"cons": 356,
"b3ports": 1,
"b9": 8,
"b1": 283,
"b2": 122,
"b3": 77,
"ports": 1,
"rica": 356
},
"depth": 2,
"agents": [208162],
"orgunit_id": "TEAM00853",
"name": "TEAM00853: Jabba - Mooiriver (Bongiwe Gwala)"
},
"921": {
"data": {
"cons": 22,
"b3ports": 0,
"b9": 2,
"b1": 20,
"b2": 7,
"b3": 5,
"ports": 0,
"rica": 22
},
"depth": 1,
"agents": [210171, 212842],
"orgunit_id": "TEAM00921",
"name": "TEAM00921: Jabba - Nolwazi Zungu"
},
},
"agents": {
"207072": {
"name": "Bongiwe Gwala",
"oid": 655,
"depth": 1,
"aid": "A0207072",
"orgunit_id": "TEAM00655",
"data": {
"cons": 30,
"b3ports": 0,
"b9": 2,
"b1": 25,
"b2": 14,
"b3": 10,
"ports": 0,
"rica": 30
},
"aname": "A0207072: Bongiwe Gwala",
"oname": "TEAM00655: Jabba - Mooi River (Muhammad Jaffar)"
},
"208162": {
"name": "Nkosikhona MADLALA",
"oid": 853,
"depth": 2,
"aid": "A0208162",
"orgunit_id": "TEAM00853",
"data": {
"cons": 356,
"b3ports": 1,
"b9": 8,
"b1": 283,
"b2": 122,
"b3": 77,
"ports": 1,
"rica": 356
},
"aname": "A0208162: Nkosikhona MADLALA",
"oname": "TEAM00853: Jabba - Mooiriver (Bongiwe Gwala)"
},
"212842": {
"name": "SANELE KHUMALO",
"oid": 921,
"depth": 1,
"aid": "A0212842",
"orgunit_id": "TEAM00921",
"data": {
"cons": 22,
"b3ports": 0,
"b9": 2,
"b1": 20,
"b2": 7,
"b3": 5,
"ports": 0,
"rica": 22
},
"aname": "A0212842: SANELE KHUMALO",
"oname": "TEAM00921: Jabba - Nolwazi Zungu"
},
},
"orglist": [853, 655, 921]
}

function sort_data(data, sortby, asc) {
console.log(data);

if (asc == "asc") {
data.orglist.sort(function(a, b) {
data.orgs[a].data[sortby] - data.orgs[b].data[sortby];
});
} else {
data.orglist.sort(function(a, b) {
data.orgs[b].data[sortby] - data.orgs[a].data[sortby];
});
}
// update_data;
}

sort_data(o, "b1", "asc");
console.log(o.orglist);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - 如何按关联数组值排序(复杂数组结构)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26033592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com