簡體   English   中英

如何在JS中僅對對象的值排序?

[英]How to sort only the values of an object in JS?

我有一個JS對象定義為{0: 3, 2: 2, 4: 1} ,我只希望對值進行排序,而鍵則保持原樣。 我的意思是,對對象進行排序后,最終結果應為{0: 1, 2: 2, 4: 3} ,因此只有值會更改其位置,而不是鍵。

我有以下代碼段:

let list = {0: 3, 2: 2, 4: 1};
Object.keys(list)
      .sort((a, b) => list[a]-list[b])
      .reduce((obj, key) => ({
          ...obj, 
          [key]: list[key]
      }), {});

但是,它似乎不起作用。 實際上,它似乎根本沒有對它進行排序。 有什么想法如何實現我想要的JS嗎?

您可以對值進行排序,鍵保持升序,因為默認情況下,對象的整數鍵是排序的。 稍后將排序后的值分配給鍵。

 var list = { 0: 3, 2: 2, 4: 1 }, values = Object.values(list).sort((a, b) => a - b), result = Object.assign(...Object.keys(list).map((k, i) => ({ [k]: values[i] }))); console.log(result); 

還有涉及第三方庫(需要zippartition等)的更優雅的解決方案,但這應該可以幫助您:

let foo = {0: 3, 2: 2, 4: 1};

// here we'll just sort the keys and values independently and then
// recombine them
let keys = Object.keys(foo).sort((a, b) => a - b);
let vals = Object.values(foo).sort((a, b) => a - b);
let result = keys.reduce((acc, k, i) => (acc[k] = vals[i], acc), {});

另一個解決方案

let list = {
   0: 3,
   2: 2,
   4: 1
}

let values=Object.values(list).sort()

Object.keys(list)
  .sort()
  .reduce((obj, key, i) => ({
      ...obj,
        [key]: values[i]
  }), {});

暫無
暫無

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

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