javascript - Formatting a new array with existing data - problem
问题描述
I am trying to make a new array from the data object that I have which looks like this:
const data= {
periods: [{
month: 'January',
types: [
{
name: 'sick leave',
difference: '14',
revisioned: '7000',
paid: '5000',
},
{
name: 'holiday',
difference: '12',
revisioned: '4000',
paid: '6000',
},
],
received: '3000',
taken: '2000',
result: '0',
},
{
month: 'February',
types: [
{
name: 'sick leave',
difference: '5',
revisioned: '100',
paid: '200',
},
{
name: 'holiday',
difference: '4',
revisioned: '300',
paid: '232',
},
],
received: '-2000',
taken: '2000',
result: '0',
}],
};
What I would like to do is, to take that object and take the properties types
, received
, taken
and result
and from each of these properties values create an array that would be a property of an object in a new array. The end result of the new array would look something like this:
[
{
name: 'sick_leave_difference',
result: ['14', '5'],
},
{
name: 'sick_leave_revisioned',
result: ['7000', '100'],
},
{
name: 'sick_leave_paid',
resultat: '[5000, 200]',
},
{
name: 'holiday_difference',
resultat: ['12', '4'],
},
{
name: 'holiday_revisioned',
result: ['4000', '300'],
},
{
name: 'holiday_paid',
result: '[6000, 232]',
},
{
name: 'received',
resultat: ['3000', '-2000'],
},
{
navn: 'taken',
result: ['2000', '2000'],
},
{
name: 'result',
result: ['0', '0'],
},
];
The problem is that the propery types contains an array and it is different is different from the other properties, so I am not sure how to achieve this and also in an elegant way?
解决方案
用于Array.reduce()
提取和展平types
阵列。减少展平的数组,并使用 迭代每个对象的条目Array.forEach()
。如果结果对象不存在,则创建它,然后添加结果。使用以下方法提取回数组Object.values()
:
const data= {"periods":[{"month":"January","types":[{"name":"sick leave","difference":"14","revisioned":"7000","paid":"5000"},{"name":"holiday","difference":"12","revisioned":"4000","paid":"6000"}],"received":"3000","taken":"2000","result":"0"},{"month":"February","types":[{"name":"sick leave","difference":"5","revisioned":"100","paid":"200"},{"name":"holiday","difference":"4","revisioned":"300","paid":"232"}],"received":"-2000","taken":"2000","result":"0"}]};
const result = Object.values(data.periods
.reduce((r, { types }) => [...r, ...types], [])
.reduce((r, { name, ...props }) => {
Object.entries(props).forEach(([k, v]) => {
const navn = `${name} ${k}`.replace(' ', '-');
if(!r[navn]) r[navn] = { navn, result: [] };
r[navn].result.push(v);
});
return r;
}, {}));
console.log(result);
推荐阅读
- php - 使用 .live 电子邮件发送邮件 php
- python - 在 Python 中将列表写入 CSV
- java - 当我单击片段中的标签(标题需要更改为另一个)但使用相同的片段时,如何更改标题标题
- scala - 如何在Scala中迭代Future List的结果?
- debugging - 有没有办法使用 C-Spy 命令行实用程序进行交互式调试?
- javascript - 反应:警告:validateDOMNesting(...):空白文本节点不能作为子节点出现
- sql - 为什么将 ROW_NUMBER 定义为窗口函数?
- r - 星星包:如何根据属性(文件名)定义附加维度?
- python - 如何按键分组并仅从熊猫数据框中返回最大值观察
- r - 分组的新日期列