[英]Creating nested objects with es6
I'm getting some data back from a local API, and unfortunately I don't have much control of the what's coming to me, what I am hoping is that I can transform the data after my API call using a function.我正在从本地 API 获取一些数据,但不幸的是,我对即将发生的事情没有太多控制权,我希望我可以在 API 调用后使用函数转换数据。
This is what I have currently这是我目前所拥有的
transformArray = () => {
const { rawData } = this.state
const obj = Object.fromEntries(
rawData.map(category => [
category,
{
aboveExpectation: rawData[0].value,
atExpectation: rawData[1].value,
belowExpectation: rawData[2].value,
},
console.log('category', category),
]),
)
console.log(obj)
}
Output: [object Object]: {aboveExpectation: 6, atExpectation: 31, belowExpectation: 18}
The rawdata back from the API looks like this从 API 返回的原始数据如下所示
data [
{
"name": "Animal care",
"Gap": "Above expectation",
"value": 6
},
{
"name": "Animal care",
"Gap": "At expectation",
"value": 31
},
{
"name": "Animal care",
"Gap": "Below expectation",
"value": 18
},
{
"name": "Calving and calf rearing",
"Gap": "Above expectation",
"value": 8
},
{
"name": "Calving and calf rearing",
"Gap": "At expectation",
"value": 29
},
{
"name": "Calving and calf rearing",
"Gap": "Below expectation",
"value": 18
},
{
"name": "Reproduction",
"Gap": "Above expectation",
"value": 7
},
{
"name": "Reproduction",
"Gap": "At expectation",
"value": 25
},
{
"name": "Reproduction",
"Gap": "Below expectation",
"value": 23
}
]
So instead of having 9 separate objects, I would like something that's a bit more iterable, something like this因此,与其有 9 个单独的对象,不如说我想要一些更可迭代的东西,就像这样
"Animals": {
"animalCare": {
"atExpectation": 1,
"aboveExpectation": 13,
"belowExpectation": 15
},
"calvingAndCalfRearing": {
"atExpectation": 1,
"aboveExpectation": 13,
"belowExpectation": 15
},
"Reproduction": {
"atExpectation": 1,
"aboveExpectation": 13,
"belowExpectation": 15
}
},
Now I have made some progress with my transformArray function but it's not quite what I want.现在我在我的 transformArray 函数上取得了一些进展,但这并不是我想要的。 I was hoping someone could point me in the right direction please
我希望有人能指出我正确的方向
Reduce the array of objects to an object, and create a property for each name
, and init/update the value for each Gap
:将对象数组缩减为一个对象,并为每个
name
创建一个属性,并为每个Gap
初始化/更新值:
const data = [{"name":"Animal care","Gap":"Above expectation","value":6},{"name":"Animal care","Gap":"At expectation","value":31},{"name":"Animal care","Gap":"Below expectation","value":18},{"name":"Calving and calf rearing","Gap":"Above expectation","value":8},{"name":"Calving and calf rearing","Gap":"At expectation","value":29},{"name":"Calving and calf rearing","Gap":"Below expectation","value":18},{"name":"Reproduction","Gap":"Above expectation","value":7},{"name":"Reproduction","Gap":"At expectation","value":25},{"name":"Reproduction","Gap":"Below expectation","value":23}] const result = data.reduce((r, o) => { const name = r[o.name] || (r[o.name] = {}) // create an object for the name, or use the existing one name[o.Gap] = (name[o.Gap] || 0) + o.value; // add/update the Gap value return r }, {}) console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.