在我的 JSON.parse 之后我有这个数据
data = [
{
"serviceType": "service1",
"method": "close",
"quantity": 56
},
{
"serviceType": "service1",
"method": "divert",
"quantity": 175
},
{
"serviceType": "service1",
"method": "reverted",
"quantity": 80
},
{
"serviceType": "service2",
"method": "close",
"quantity": 15
},
{
"serviceType": "service2",
"method": "divert",
"quantity": 149
},
{
"serviceType": "service2",
"method": "reverted",
"quantity": 149
},
{
"serviceType": "service3",
"method": "close",
"quantity": 87
},....
}
]
我需要它像 d3 example 中的 data.json
一样其中 categorie
是我的 serviceType
,它是每个对象的第一个属性(每个服务类型 1 个对象),然后每个对象的第二个属性应该是一个对象数组,其中包含方法及数量。
我一直在对data
中的每个对象使用forEach
,并且我正在推送每个serviceType
中的第一个OK(没有第二个)属性(property))。问题是我不知道如何更新
正确对象内的对象values
(第二个属性)(根据当前的serviceType
) .
finalArray = [];
data.forEach(function (d, index) {
var serviceType = d.serviceType;
const found = finalArray.some( el => el.serviceType === serviceType);
if (!found) {
var obj = createObj(d); //function returning an obj with the desired structure
finalArray.push(obj);
}...
});
这是转换最终应如何进行的示例。
[
{
"serviceType": "service1",
"values": [
{
"quantity": 0,
"method": "close"
},
{
"quantity": 4,
"method": "divert"
},
{
"quantity": 12,
"method": "reverted"
},
{
"quantity": 0,
"method": "checked"
}
]
},
{
"serviceType": "service2",
"values": [
{
"quantity": 1,
"method": "close"
},
{
"quantity": 21,
"method": "divert"
},
{
"quantity": 13,
"method": "reverted"
},
{
"quantity": 6,
"method": "checked"
}
]
}, ...
最佳答案
您可以选择 Map
并将相同的serviceType
分组。稍后构建一个具有 categorie
和 values
属性的数组。
var data = [{ serviceType: "service1", method: "close", quantity: 56 }, { serviceType: "service1", method: "divert", quantity: 175 }, { serviceType: "service1", method: "reverted", quantity: 80 }, { serviceType: "service2", method: "close", quantity: 15 }, { serviceType: "service2", method: "divert", quantity: 149 }, { serviceType: "service2", method: "reverted", quantity: 149 }, { serviceType: "service3", method: "close", quantity: 87 }],
result = Array.from(
data.reduce((m, { serviceType, ...o }) => m.set(serviceType, [...(m.get(serviceType) || []), o]), new Map),
([categorie, values]) => ({ categorie, values })
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - JSON.parse 结果为正确的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58509662/