簡體   English   中英

如何按值按字母順序對 object 進行排序?

[英]How can I sort an object alphabetically by value?

所以我有一個國家列表,默認情況下它們按 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

您將在控制台中看到結果。

Object.entries按值排序,然后使用Object.fromEntries將此鍵值對數組轉換回 object:

 Object.fromEntries(
   Object.entries(obj)
    .sort(([keyA, valueA], [keyB, valueB]) => valueA.localeCompare(valueB))
  )

請注意,如果有數字鍵或 object 發生突變(因為這會再次更改排序順序),則排序對象是沒有意義的。

試試這個進行排序:

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
}

這對你有用嗎?

 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);

暫無
暫無

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

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