所以我有一個國家/地區串列,默認情況下它們按 ISOA2 代碼排序,這是某種國家/地區代碼。
說這個清單:
{
"AD": "Andorra",
"AE": "United Arab Emirates",
"AF": "Afghanistan",
"AG": "Antigua and Barbuda",
"AI": "Anguilla",
"AL": "Albania",
"AM": "Armenia",
"AN": "Netherlands Antilles",
"GB": "United Kingdom"
}
我有這個代碼:
function sortObject(obj) {
return Object
.keys(obj)
.sort()
.reduce((a, v) => {
a[v] = obj[v];
return a;
}, {});
}
// data is the list of countries
const result = sortObject(data);
我正在嘗試使用該代碼對其進行排序,但它始終回傳相同的串列。
我需要串列是這樣的:
{
"AF": "Afghanistan",
"AL": "Albania",
"AD": "Andorra",
"AI": "Anguilla",
"AG": "Antigua and Barbuda",
"AM": "Armenia",
"AN": "Netherlands Antilles",
"AE": "United Arab Emirates",
"GB": "United Kingdom"
}
我究竟做錯了什么?
你可以在這里玩:
https://codesandbox.io/s/js-playground-forked-xk005?file=/src/index.js
您將在控制臺中看到結果。
uj5u.com熱心網友回復:
取Object.entries排序它們由值,然后使用Object.fromEntries把這種陣列鍵值的雙回物件:
Object.fromEntries(
Object.entries(obj)
.sort(([keyA, valueA], [keyB, valueB]) => valueA.localeCompare(valueB))
)
請注意,如果有數字鍵或物件發生變異(因為再次更改排序順序),則對物件進行排序是沒有意義的。
uj5u.com熱心網友回復:
試試這個排序:
const sortObject = obj => {
const ret = {}
Object.values(obj)
.sort()
.forEach(val => {
const key = Object.keys(obj).find(key => obj[key] === val)
ret[key] = val
})
return ret
}
uj5u.com熱心網友回復:
這對你有用嗎?
function sortObject(obj) {
return Object.fromEntries(Object
.entries(obj)
.sort((a,b)=>a[1].localeCompare(b[1])));
}
const data = {
"AD": "Andorra",
"AE": "United Arab Emirates",
"AF": "Afghanistan",
"AG": "Antigua and Barbuda",
"AI": "Anguilla",
"AL": "Albania",
"AM": "Armenia",
"AN": "Netherlands Antilles",
"GB": "United Kingdom"
}
// data is the list of countries
const result = sortObject(data);
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/371106.html
標籤:javascript 算法 排序 目的 ecmascript-6
上一篇:根據偶數/奇數答案更改顏色
