我希望能夠將下面的嵌套物件從最低數字排序到最高數字......
{
"a": 50,
"b": {
"c": {
"d": 69,
"e": 420,
"f": 21,
"g": {
"h": 5,
"i": 3,
}
}
},
"j": 1,
"k": 1000
}
...使其看起來像這樣:
{
"j": 1, // min in OBJECT
"b": {
"c": { // min in B
"g": { // min in C
"i": 3, // min in G
"h": 5
},
"f": 21,
"d": 69,
"e": 420
}
},
"a": 50,
"k": 1000
}
請注意,物件按物件內部的最小數字排序,這意味著物件的直接子值是 [1, 3, 50, 1000]。
uj5u.com熱心網友回復:
使用 Object.entries、Array forEach、Array reduce 和 Array sort 快速而骯臟
getpaths在表單中創建一個陣列
[
["a.b.c", 2],
["d.e", 1],
....
]
然后可以使用陣列排序輕松排序
createPath獲取根物件、路徑和值并在物件中創建“路徑”
所以,給定{}, "a.b.c", 2
會導致
{
a: {
b: {
c: 2
}
}
}
由于(非數字)物件鍵按插入順序“排序”,因此按值順序插入值會根據需要生成物件
let obj = { a: 50, b: { c: { d: 69, e: 420, f: 21, g: { h: 5, i: 3, }, }, }, j: 1, k: 1000 };
const getpaths = (obj) => {
const paths = [];
const fn = (obj, path = "") => {
Object.entries(obj).forEach(([key, value]) => {
if (typeof value === "object") {
return fn(value, `${path}.${key}`);
}
paths.push([`${path}.${key}`.slice(1), value]);
});
};
fn(obj);
return paths;
};
const createPath = (obj, [path, value]) => {
path.split(".").reduce(
(acc, key, index, array) => acc[key] ||= array[index 1] ? {} : value, obj);
return obj;
};
const result = getpaths(obj)
.sort(([, a], [, b]) => a - b)
.reduce((acc, item) => createPath(acc, item), {});
console.log(JSON.stringify(result, null, 4));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/507349.html
標籤:javascript json 排序
上一篇:屬性路徑“password”中給出的“string”、“null”型別的預期引數
下一篇:在GTK中防止執行緒的多個實體
