[英]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);
還有涉及第三方庫(需要zip
, partition
等)的更優雅的解決方案,但這應該可以幫助您:
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.