แนวทางที่ดีที่สุดสำหรับกรณีเฉพาะที่นี่ในความคิดของฉันคือCommonpike ที่แนะนำ การปรับปรุงเล็กน้อยฉันขอแนะนำให้ใช้งานได้กับเบราว์เซอร์สมัยใหม่คือ:
Object.keys(aao).sort(function(a,b){return aao[b]-aao[a]});
สิ่งนี้สามารถใช้ได้อย่างง่ายดายและใช้งานได้ดีในกรณีเฉพาะที่นี่เพื่อให้คุณสามารถทำ:
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){
}
นอกจากนี้ฉันยังมีฟังก์ชัน "ทั่วไป" เพิ่มเติมที่คุณสามารถใช้เพื่อจัดเรียงได้แม้ในสถานการณ์ที่กว้างขึ้นและผสมผสานการปรับปรุงที่ฉันเพิ่งแนะนำกับแนวทางของคำตอบโดยBen Blank (การเรียงลำดับค่าสตริงด้วย) และPopeJohnPaulII ( การจัดเรียงตามช่องวัตถุ / คุณสมบัติเฉพาะ) และช่วยให้คุณตัดสินใจได้ว่าคุณต้องการลำดับลัคนาหรือลำดับลูกหลานนี่คือ:
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});
}
}
}
คุณสามารถทดสอบฟังก์ชันการทำงานโดยใช้รหัสต่อไปนี้:
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));
ดังที่ฉันได้กล่าวไปแล้วคุณสามารถวนซ้ำคีย์ที่เรียงลำดับได้หากคุณต้องการทำสิ่งของต่างๆ
let sk=sortedKeys(aoo);
for (let i=sk.length-1;i>=0;--i){
}
สุดท้าย แต่ไม่ท้ายสุดการอ้างอิงที่มีประโยชน์บางอย่างไปยังObject.keysและArray.sort