在不同的JSON对象中查找平均值



我有一个JSON对象,如下所示,它由一个id和对象测量值组成。对象测量由味觉组成,其对于每个级别(例如级别25、50和100(具有各自的味觉。我试图将味道与每个味道水平的平均值(例如酸味/物体的总测量值(合并为1个值

"objectId": "de8e783a-1a13-42be-b1b2-1bc7be24b511"
"objectMeasurements": [
{
"id": "f986cb0d-a9f2-4d8f-ad2f-9ff46e097764",
"data": {
"scale": 5,
"tastiness": [
{
"level": 100,
"sourness": 4,
"freshness": 5,
"sweetness": 3
},
{
"level": 25,
"sourness": 4,
"freshness": 3,
"sweetness": 5
},
{
"level": 50,
"sourness": 3,
"freshness": 5,
"sweetness": 5
}
]
},
},
{
"id": "12efc22b-ff69-4248-8b25-4ed8981089df",
"data": {
"scale": 5,
"tastiness": [
{
"level": 100,
"sourness": 3,
"freshness": 5,
"sweetness": 5
},
{
"level": 25,
"sourness": 5,
"freshness": 4,
"sweetness": 4
},
{
"level": 50,
"sourness": 4,
"freshness": 5,
"sweetness": 3
}
]
}
}
]

我怎么可能把数据的美味程度和每个属性的平均值组合成一个对象的测量值,比如这个

"objectId": "de8e783a-1a13-42be-b1b2-1bc7be24b511"
"objectMeasurements": [
{
"id": "someId",
"data": {
"scale": 5,
"tastiness": [
{
"level": 100,
"sourness": 3.5,
"freshness": 2,
"sweetness": 4
},
{
"level": 25,
"sourness": 4.5,
"freshness": 3.5,
"sweetness": 4.5
},
{
"level": 50,
"sourness": 3.5,
"freshness": 2,
"sweetness": 4
}
]
},
},

const input = {
"objectId": "de8e783a-1a13-42be-b1b2-1bc7be24b511",
"objectMeasurements": [{
"id": "f986cb0d-a9f2-4d8f-ad2f-9ff46e097764",
"data": {
"scale": 5,
"tastiness": [{
"level": 100,
"sourness": 4,
"freshness": 5,
"sweetness": 3
}, {
"level": 25,
"sourness": 4,
"freshness": 3,
"sweetness": 5
}, {
"level": 50,
"sourness": 3,
"freshness": 5,
"sweetness": 5
}]
},
}, {
"id": "12efc22b-ff69-4248-8b25-4ed8981089df",
"data": {
"scale": 5,
"tastiness": [{
"level": 100,
"sourness": 3,
"freshness": 5,
"sweetness": 5
}, {
"level": 25,
"sourness": 5,
"freshness": 4,
"sweetness": 4
}, {
"level": 50,
"sourness": 4,
"freshness": 5,
"sweetness": 3
}]
}
}]
}

let res = {}
input.objectMeasurements.map(obj => {
obj.data.tastiness.map((m) => {
const keys = Object.keys(m);
keys.map(key => {
if (key !== 'level') {
if (!res[(m.level)].count[key]) {
res[(m.level)].count[key] = res[(m.level)].totals[key] = 0;
}
res[(m.level)].count[key]++;
res[(m.level)].totals[key] += m[key];
} else {
if (!res[(m.level)]) {
res[(m.level)] = {
count: {},
totals: {}
}
}
}
});
});
});

let tastiness = [];
Object.keys(res).reverse().map(levelKey => {
let avg = {};
avg.level = +levelKey;
Object.keys(res[levelKey].count).map(tasteKey => {
avg[tasteKey] = res[levelKey].totals[tasteKey] / res[levelKey].count[tasteKey];
});
tastiness.push(avg);
});
input.objectMeasurements = tastiness;
console.log(input);

最新更新