Theo tôi, cách tiếp cận tốt nhất cho trường hợp cụ thể ở đây là một điểm chung được đề xuất. Một cải tiến nhỏ mà tôi muốn đề xuất có thể hoạt động trong các trình duyệt hiện đại là:
Object.keys(aao).sort(function(a,b){return aao[b]-aao[a]});
Điều này có thể áp dụng dễ dàng và hoạt động tốt trong trường hợp cụ thể ở đây, do đó bạn có thể làm:
let aoo={};
aao["sub2"]=1;
aao["sub0"]=-1;
aao["sub1"]=0;
aao["sub3"]=1;
aao["sub4"]=0;
let sk=Object.keys(aao).sort(function(a,b){return aao[b]-aao[a]});
for (let i=sk.length-1;i>=0;--i){
}
Bên cạnh đó, tôi cung cấp ở đây một hàm "chung chung" hơn mà bạn có thể sử dụng để sắp xếp ngay cả trong nhiều tình huống hơn và kết hợp cải tiến mà tôi vừa đề xuất với các phương pháp tiếp cận câu trả lời của Ben Blank (sắp xếp cả giá trị chuỗi) và PopeJohnPaulII ( sắp xếp theo trường / thuộc tính đối tượng cụ thể) và cho phép bạn quyết định xem bạn muốn một thứ tự con cháu hay con cháu, đây là:
function sortedKeys(aao,comp="",intVal=false,desc=false){
let keys=Object.keys(aao);
if (comp!="") {
if (intVal) {
if (desc) return keys.sort(function(a,b){return aao[b][comp]-aao[a][comp]});
else return keys.sort(function(a,b){return aao[a][comp]-aao[a][comp]});
} else {
if (desc) return keys.sort(function(a,b){return aao[b][comp]<aao[a][comp]?1:aao[b][comp]>aao[a][comp]?-1:0});
else return keys.sort(function(a,b){return aao[a][comp]<aao[b][comp]?1:aao[a][comp]>aao[b][comp]?-1:0});
}
} else {
if (intVal) {
if (desc) return keys.sort(function(a,b){return aao[b]-aao[a]});
else return keys.sort(function(a,b){return aao[a]-aao[b]});
} else {
if (desc) return keys.sort(function(a,b){return aao[b]<aao[a]?1:aao[b]>aao[a]?-1:0});
else return keys.sort(function(a,b){return aao[a]<aao[b]?1:aao[a]>aao[b]?-1:0});
}
}
}
Bạn có thể kiểm tra các chức năng bằng cách thử một cái gì đó như mã sau:
let items={};
items['Edward']=21;
items['Sharpe']=37;
items['And']=45;
items['The']=-12;
items['Magnetic']=13;
items['Zeros']=37;
console.log("1: "+sortedKeys(items));
console.log("2: "+sortedKeys(items,"",false,true));
console.log("3: "+sortedKeys(items,"",true,false));
console.log("4: "+sortedKeys(items,"",true,true));
items={};
items['k1']={name:'Edward',value:21};
items['k2']={name:'Sharpe',value:37};
items['k3']={name:'And',value:45};
items['k4']={name:'The',value:-12};
items['k5']={name:'Magnetic',value:13};
items['k6']={name:'Zeros',value:37};
console.log("1: "+sortedKeys(items,"name"));
console.log("2: "+sortedKeys(items,"name",false,true));
Như tôi đã nói, bạn có thể lặp lại các phím được sắp xếp nếu bạn cần thực hiện các công việc
let sk=sortedKeys(aoo);
for (let i=sk.length-1;i>=0;--i){
}
Cuối cùng, nhưng không kém phần quan trọng, một số tham chiếu hữu ích đến Object.keys và Array.sort