gpt4 book ai didi

javascript - 在 javascript 中从扁平化 JSON 创建嵌套 json

转载 作者:行者123 更新时间:2023-11-28 14:11:07 26 4
gpt4 key购买 nike

最近开始接触javascript。我有一个扁平的 json,看起来像:

[
{"timestamp":"2019-01-01T00:00:00.000Z","MarketShare":89905.0,"Territory":"PHILADELPHIA PA"},
{"timestamp":"2019-01-01T00:00:00.000Z","MarketShare":82991.0,"Territory":"SEATTLE WA"},
{"timestamp":"2019-02-01T00:00:00.000Z","MarketShare":73662.0,"Territory":"PHILADELPHIA PA"},
{"timestamp":"2019-02-01T00:00:00.000Z","MarketShare":67059.0,"Territory":"SEATTLE WA"},
{"timestamp":"2019-03-01T00:00:00.000Z","MarketShare":72898.0,"Territory":"PHILADELPHIA PA"},
{"timestamp":"2019-03-01T00:00:00.000Z","MarketShare":68013.0,"Territory":"SEATTLE WA"},
{"timestamp":"2019-04-01T00:00:00.000Z","MarketShare":74607.0,"Territory":"PHILADELPHIA PA"},
{"timestamp":"2019-04-01T00:00:00.000Z","MarketShare":66769.0,"Territory":"SEATTLE WA"},
{"timestamp":"2019-05-01T00:00:00.000Z","MarketShare":93932.0,"Territory":"PHILADELPHIA PA"},
{"timestamp":"2019-05-01T00:00:00.000Z","MarketShare":86514.0,"Territory":"SEATTLE WA"}
]

基本上,对于给定的时间戳,我想在结果键下收集 MarketShare 和 Territory。
预期输出是:

    [
{
"timestamp":"2019-01-01T00:00:00.000Z",
"result":[
{
"MarketShare":89905.0,
"Territory":"PHILADELPHIA PA"
},
{
"MarketShare":82991.0,
"Territory":"SEATTLE WA"
},

]
},
{
"timestamp":"2019-02-01T00:00:00.000Z",
"result":[
{
"MarketShare":73662.0,
"Territory":"PHILADELPHIA PA"
},
{
"MarketShare":67059.0,
"Territory":"SEATTLE WA"
}
]
},
{
"timestamp":"2019-03-01T00:00:00.000Z",
"result":[
{
"MarketShare":72898.0,
"Territory":"PHILADELPHIA PA"
},
{
"MarketShare":68013.0,
"Territory":"SEATTLE WA"
}
]
},
{
"timestamp":"2019-04-01T00:00:00.000Z",
"result":[
{
"MarketShare":74607.0,
"Territory":"PHILADELPHIA PA"
},
{
"MarketShare":66769.0,
"Territory":"SEATTLE WA"
}
]
},
{
"timestamp":"2019-05-01T00:00:00.000Z",
"result":[
{
"MarketShare":93932.0,
"Territory":"PHILADELPHIA PA"
},
{
"MarketShare":86514.0,
"Territory":"SEATTLE WA"
}
]
}
]

我正在尝试创建一个通用实用程序,将任意数量的键值对置于给定的时间戳下。目前取得的进展:

topNFormat=[]
for(var i = 0; i < firstResult.length; i++) {
//res = [firstResult[i]["Territory"]
topNFormat[timestamp] = firstResult[i][timestamp] || {};
topNFormat[result] = firstResult[i][result] || [];
topNFormat[result].push(firstResult[i]);
//return collection;
}

最佳答案

这是一个通用函数transform,可以动态对项目进行分组:

const input = [{
"timestamp": "2019-01-01T00:00:00.000Z",
"MarketShare": 89905.0,
"Territory": "PHILADELPHIA PA"
},
{
"timestamp": "2019-01-01T00:00:00.000Z",
"MarketShare": 82991.0,
"Territory": "SEATTLE WA"
},
{
"timestamp": "2019-02-01T00:00:00.000Z",
"MarketShare": 73662.0,
"Territory": "PHILADELPHIA PA"
},
{
"timestamp": "2019-02-01T00:00:00.000Z",
"MarketShare": 67059.0,
"Territory": "SEATTLE WA"
},
{
"timestamp": "2019-03-01T00:00:00.000Z",
"MarketShare": 72898.0,
"Territory": "PHILADELPHIA PA"
},
{
"timestamp": "2019-03-01T00:00:00.000Z",
"MarketShare": 68013.0,
"Territory": "SEATTLE WA"
},
{
"timestamp": "2019-04-01T00:00:00.000Z",
"MarketShare": 74607.0,
"Territory": "PHILADELPHIA PA"
},
{
"timestamp": "2019-04-01T00:00:00.000Z",
"MarketShare": 66769.0,
"Territory": "SEATTLE WA"
},
{
"timestamp": "2019-05-01T00:00:00.000Z",
"MarketShare": 93932.0,
"Territory": "PHILADELPHIA PA"
},
{
"timestamp": "2019-05-01T00:00:00.000Z",
"MarketShare": 86514.0,
"Territory": "SEATTLE WA"
}
];

const transform = (array, groupBy, groupUnder) => array.reduce((acc, object) => {
if (groupBy in object) {
if (object[groupBy] in acc) {
acc[object[groupBy]][groupUnder] = [
...acc[object[groupBy]][groupUnder],
...[Object.keys(object).filter((key) => key !== groupBy).reduce((acc, key) => {
acc[key] = object[key];

return acc;
}, {})]
]
} else {
acc[object[groupBy]] = {
[groupUnder]: [Object.keys(object).filter((key) => key !== groupBy).reduce((acc, key) => {
acc[key] = object[key];

return acc;
}, {})]
}
}
}

return acc;
}, {});

const groupBy = 'timestamp';
const groupUnder = 'result';

const transformedResult = transform(input, groupBy, groupUnder);

console.log(transformedResult);

console.log('-'.repeat(100));

console.log(Object.keys(transformedResult).map((key) => Object.assign({}, transformedResult[key], {
[groupBy]: key
})));

关于javascript - 在 javascript 中从扁平化 JSON 创建嵌套 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59408332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com