簡體   English   中英

如何按關聯數組值排序(復雜數組結構)?

[英]How to sort by an associative array value(Complex array structure)?

考慮以下:

我在HTML表格的數組中表示數據,例如:

表的圖像

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,我可以進行排序。

現在,我也需要由agents訂購。 它需要先由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進行排序。


最后更新:

我可以正常工作,對orgsagents進行排序,我必須創建兩個排序函數:

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

然后我就連續調用這些函數...即

 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> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM