Javascript 避免在数据转换期间重复代码

Javascript 避免在数据转换期间重复代码,javascript,javascript-objects,Javascript,Javascript Objects,我有一些虚拟数据,如下所示: data: { first: { date_2019_01: 10, date_2019_02: 15, .... }, second: { date_2019_01: 30, date_2019_02: 35, .... } } 我必须将这些初始数据转换为以下格式,其中日期作为键转换为月份,其值作为增长 first: [ {

我有一些虚拟数据,如下所示:

data: {
    first: {
        date_2019_01: 10,
        date_2019_02: 15,
        ....
    },
    second: {
        date_2019_01: 30,
        date_2019_02: 35,
        ....
    }
}
我必须将这些初始数据转换为以下格式,其中日期作为键转换为月份,其值作为增长

first: [
    {
        month: 1,
        growth: 10
    },
    {
        month: 2,
        growth: 15
    },
    ...
],
second: [
    {
        month: 1,
        growth: 30
    },
    {

    }
]
在我的解决方案中,我获取密钥并将其拆分,以获得我想要的月份,并将其推送到新阵列。但这里我的代码重复了。我正在学习的代码质量,其中包括干燥的概念以及

请任何人帮我用更好的格式写这段代码

多谢各位

let first = data["first"];

let firstMonth = [];
Object.keys(first).map(function(key) {
    firstMonth.push({
        month: key.split('_')[2],
        growth: first[key]
    });
});

let second = data["second"];

let secondMonth = [];
Object.keys(second).map(function(key) {
    secondMonth.push({
        month: key.split('_')[2],
        growth: second[key]
    });
});

let finalData = {
    first: firstMonth,
    second: secondMonth
}

一个选项是
.reduce
中的
.map
。您可以使用
Object.entries
而不是
Object.keys
一次检索键和值,这将减少所需的语法量:

const数据={
第一:{
日期:2019年1月10日,
日期:2019年2月15日,
},
第二:{
日期:2019年1月30日,
日期:2019年02月35日,
}
};
const newData=Object.entries(data).reduce((a,[key,obj])=>{
a[key]=Object.entries(obj.map)([key,growth])=>({
月份:编号(键片(10)),
生长
}));
返回a;
}, {});

console.log(newData)一个选项是
中的
.map
。您可以使用
Object.entries
而不是
Object.keys
一次检索键和值,这将减少所需的语法量:

const数据={
第一:{
日期:2019年1月10日,
日期:2019年2月15日,
},
第二:{
日期:2019年1月30日,
日期:2019年02月35日,
}
};
const newData=Object.entries(data).reduce((a,[key,obj])=>{
a[key]=Object.entries(obj.map)([key,growth])=>({
月份:编号(键片(10)),
生长
}));
返回a;
}, {});

console.log(newData)当涉及到代码质量时,一个好方法是将逻辑提取到具有有意义名称的函数中。代码有增长的趋势,因此将逻辑提取为位(函数)在未来将具有许多优势。在我看来,较短的语法/逻辑并不总是转化为高质量的代码,在许多情况下,与较短且复杂的语法相比,易于阅读/理解的代码(甚至更长一点)更可取

const数据={
第一:{
日期:2019年1月10日,
日期:2019年2月15日,
},
第二:{
日期:2019年1月30日,
日期:2019年02月35日,
}
};
函数转换器monthData(monthData,resultar){
Object.key(monthData).map(function(key){
结果推({
月份:编号(键片(10)),
增长:monthData[关键]
});
});
}
让convertedMonthData={};
Object.keys(数据).map(函数(键){
const monthData=数据[键];
convertedMonthData[键]=[];
convertMonthData(monthData,convertedMonthData[key]);
});

console.log(convertedMonthData)当涉及到代码质量时,一个好方法是将逻辑提取到具有有意义名称的函数中。代码有增长的趋势,因此将逻辑提取为位(函数)在未来将具有许多优势。在我看来,较短的语法/逻辑并不总是转化为高质量的代码,在许多情况下,与较短且复杂的语法相比,易于阅读/理解的代码(甚至更长一点)更可取

const数据={
第一:{
日期:2019年1月10日,
日期:2019年2月15日,
},
第二:{
日期:2019年1月30日,
日期:2019年02月35日,
}
};
函数转换器monthData(monthData,resultar){
Object.key(monthData).map(function(key){
结果推({
月份:编号(键片(10)),
增长:monthData[关键]
});
});
}
让convertedMonthData={};
Object.keys(数据).map(函数(键){
const monthData=数据[键];
convertedMonthData[键]=[];
convertMonthData(monthData,convertedMonthData[key]);
});

console.log(convertedMonthData)我们可以改变数据结构吗?我们可以改变数据结构吗?