如何使用node.js将这种json对象格式化为另一个json对象



我有一个json对象,如下所示:

{
"sample1": {
"4": 2245,
"5": 2175,
"6": 3495,
"7": 1845,
...
"11.5": 1674,
"12.5": 1649
},
"sample2": {
"4": 3295,
"5": 3600,
"8": 2625,
"9": 2830,
...
"11.5": 2879,
"12.5": 3090
}
}

我想将其格式化为:

[
{
"index": "4",
"sample1": "2245",
"sample2": "3295"
},
{
"index": "5",
"sample1": "2175",
"sample2": "3600"
},
{
"index": "6",
"sample1": "3495",
"sample2": ""
},
....
{
"index": "12.5",
"sample1": "1649",
"sample2": "3090"
}
]

在python中,使用panda很容易做到这一点,但我不想将python脚本添加到javascript中。使用javascript有什么简单的方法可以做到这一点?

const data = {
sample1: {
4: 2245,
5: 2175,
6: 3495,
7: 1845,
11.5: 1674,
12.5: 1649
},
sample2: {
4: 3295,
5: 3600,
8: 2625,
9: 2830,
11.5: 2879,
12.5: 3090
},
sample3: {
4: 3295,
5: 3600,
6: 2625,
9: 2830,
11.5: 2879,
12.5: 3090
}
};
const keys = Object.keys(data);
const mergedInnerKeys = Array.from(
new Set(
keys
.reduce((val, key) => [...val, ...Object.keys(data[key])], [])
.sort((a, b) => a - b)
)
);
const res = mergedInnerKeys.map((key) => ({
index: key,
...keys.reduce(
(v, k) => ({
...v,
[k]: data[k][key] !== undefined ? data[k][key].toString() : ''
}),
{}
)
}));
console.log(res);

const obj = {
"sample1": {
"4": 2245,
"5": 2175,
"6": 3495,
"7": 1845,
"11.5": 1674,
"12.5": 1649
},
"sample2": {
"4": 3295,
"5": 3600,
"8": 2625,
"9": 2830,
"11.5": 2879,
"12.5": 3090
}
}
const result = Object.keys(obj.sample1) // All keys from sample1
.concat(Object.keys(obj.sample2)) // Concat all keys from sample2
.filter((v, i, s) => s.indexOf(v) == i) // Filter unique values
.sort((a, b) => a - b) // Sort the keys, treating them as numbers
.map(k => ({ // Produce each object of the resulting array, one per key
index: k,
sample1: k in obj.sample1 ? obj.sample1[k].toString() : '',
sample2: k in obj.sample2 ? obj.sample2[k].toString() : ''
}));
console.log(result);

最新更新