我正在處理的 JSON 資料
"data": [
{
"campaign_name": "Daily Shopping - [Reach Ad]",
"reach": "2365439",
"clicks": "43692",
"impressions": "4873908",
"actions": [
{
"action_type": "like",
"value": "1"
},
{
"action_type": "comment",
"value": "40"
}
],
"date_start": "2022-05-27",
"date_stop": "2022-06-03"
},
這是我使用的代碼,但它是錯誤的。
result = arr.reduce((r,o) => {r[o.action_type] = o.value; return r; }, {});
輸出應該類似于以下方式
"data": [
{
"campaign_name": "Daily Shopping - [Reach Ad]",
"reach": "2365439",
"clicks": "43692",
"impressions": "4873908",
"like": "1",
"comment: "40"
}
uj5u.com熱心網友回復:
這可以通過Object.fromEntries在物件字面量中傳播語法來實作:
const arr = [{"campaign_name": "Daily Shopping - [Reach Ad]","reach": "2365439","clicks": "43692","impressions": "4873908","actions": [{"action_type": "like","value": "1"},{"action_type": "comment","value": "40"}],"date_start": "2022-05-27","date_stop": "2022-06-03"},];
const result = arr.map(({actions, ...rest}) => ({
...rest,
...Object.fromEntries(actions.map(({action_type, value}) =>
[action_type, value]
))
}));
console.log(result);
uj5u.com熱心網友回復:
您的代碼幾乎是正確的。如您所見,只需要修改傳遞給 reducer 的初始引數。可以原位應用該修改。
代碼
let s_x = `{
"data": [
{
"campaign_name": "Daily Shopping - [Reach Ad]",
"reach": "2365439",
"clicks": "43692",
"impressions": "4873908",
"actions": [
{
"action_type": "like",
"value": "1"
},
{
"action_type": "comment",
"value": "40"
}
],
"date_start": "2022-05-27",
"date_stop": "2022-06-03"
}
]
}`
, x = JSON.parse(s_x)
;
x.data.forEach ( po_orig => {
let o_transformed = po_orig.actions.reduce ((r,o) => {
r[o.action_type] = o.value; return r;
}, po_orig) // Note: po_orig instead of {}
;
delete po_orig['actions'];
});
console.log(`new data: `, x);
uj5u.com熱心網友回復:
下面是一個使用Object.entries()and的實作reduce()
const raw_data = `{
"data": [
{
"campaign_name": "Daily Shopping - [Reach Ad]",
"reach": "2365439",
"clicks": "43692",
"impressions": "4873908",
"actions": [
{
"action_type": "like",
"value": "1"
},
{
"action_type": "comment",
"value": "40"
}
],
"date_start": "2022-05-27",
"date_stop": "2022-06-03"
}
]
}`;
const data = JSON.parse(raw_data).data;
const processedData = Object.entries(data[0]).reduce(
(accumulator, [currentProperty, currentValue]) => {
if (currentProperty !== "actions") {
if (!currentProperty.includes("date"))
accumulator[currentProperty] = currentValue;
} else {
currentValue.forEach(
(action) => (accumulator[action.action_type] = action.value)
);
}
return accumulator;
},
{}
);
console.log(processedData);
uj5u.com熱心網友回復:
您還可以使用簡單的物件分配而不洗掉現有的資料格式來獲得您想要的結果。
const arr = [{"campaign_name": "Daily Shopping - [Reach Ad]","reach": "2365439","clicks": "43692","impressions": "4873908","actions": [{"action_type": "like","value": "1"},{"action_type": "comment","value": "40"}],"date_start": "2022-05-27","date_stop": "2022-06-03"}];
let result = arr.reduce((a, r,o) => {
Object.assign({}, r['actions'].reduce((d,e,f) => {
r[e['action_type']] = e['value'];
}, {}), r);
return r;
}, {});
console.log(result);
uj5u.com熱心網友回復:
var data = [{
"campaign_name": "Daily Shopping - [Reach Ad]",
"reach": "2365439",
"clicks": "43692",
"impressions": "4873908",
"actions": [{
"action_type": "like",
"value": "1"
},
{
"action_type": "comment",
"value": "40"
}
],
"date_start": "2022-05-27",
"date_stop": "2022-06-03"
}, ]
dataN = data.map(d => {
return {
campaign_name: d.campaign_name,
reach: d.reach,
clicks: d.reach,
impressions: d.impressions,
like: d.actions[0].value,
comment: d.actions[1].value
}
})
console.log(dataN);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/495968.html
標籤:javascript
上一篇:為什么我不能選中復選框?
