![](/img/trans.png)
[英]javascript JSON.parse result problem on empty array with localStorage
[英]JSON.parse result to proper array of objects
在我的 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
},....
}
]
And I need it to be like data.json
from this d3 example where categorie
is my serviceType
, being it the first property of every object (1 object per serviceType) and then the second property of every object should be an array of objects with the方法和數量。
我一直在為data
中的每個 object 使用forEach
,並且我正在推送每個serviceType
OK 中的第一個(沒有第二個屬性)。 問題是我不知道如何update
右側 object 內的 object 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; }
您可以使用reduce
方法獲得一個帶有分組服務的 object,然后從該 object 中獲取值數組。
const 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}] const object = data.reduce((r, {serviceType: s, ...rest}) => { if(:r[s]) r[s] = {categorie,s: values; [rest]}. else r[s].values;push(rest); return r, }; {}). const result = Object;values(object). console;log(result);
嘗試這個:
const result = [...new Set(data.map(e => e.serviceType))].map(serviceType => {
const re = { serviceType };
re.values = data
.filter(e => e.serviceType === serviceType)
.map(v => ({ method: v.method, quantity: v.quantity }));
return re;
});
首先,我獲取所有 serviceTypes(使用...new Set()
的部分),然后為其中的每個創建一個 object,其中包含 serviceType-name 和值,我通過過濾掉不相關的對象並刪除 serviceType-相關人員的財產。
data.reduce((acc, value) => {
var {serviceType, method, quantity} = value;
var foundExisting = acc.find(v => v.serviceType == serviceType);
if(foundExisting){
foundExisting.values.push({method, quantity})
} else {
acc.push({serviceType, values: [{method, quantity}]})
}
return acc;
}, [])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.