如何DRY映射功能?
How to DRY mapping function?
我有以下数据:
var jsonData = {
"data": [
{
"id": 1,
"name": "London",
"date": "2018-04-20",
"temp": 15,
"rain": 2,
"wind": 50,
"humidity" : 80,
}
]
};
这是我目前编码的映射部分:
var mainContainer = {
temp : jsonData.data.map (a => a.temp),
rain : jsonData.data.map (a => a.rain), // jsonData.data.map (a => ) being repeated
wind : jsonData.data.map (a => a.wind), // jsonData.data.map (a => ) being repeated
humidity: jsonData.data.map (a => a.humidity) // jsonData.data.map (a => ) being repeated
};
console.log(mainContainer);
有什么方法可以DRY代码,让我不重复映射函数?唯一的区别在于 属性 名称和映射部分。
创建一个包含 属性 个要映射的名称的数组
var props = ["temp", "rain", "wind", "humidity" ];
现在使用 reduce
迭代此 props
var mainContainer = props.reduce( (a,c) => {
a[c] = jsonData.data.map (s => s[c]);
return a;
}, {});
您可以循环到 data
数组,并通过检查 属性 是否已经存在来相应地创建一个新对象。
var jsonData = {
"data": [
{
"id": 1,
"name": "London",
"date": "2018-04-20",
"temp": 15,
"rain": 2,
"wind": 50,
"humidity" : 80,
},
{
"id": 1,
"name": "London",
"date": "2018-04-20",
"temp": 25,
"rain": 22,
"wind": 40,
"humidity" : 60,
}
]
};
var res = {};
jsonData.data.forEach((obj)=>{
if(res.temp){
res.temp.push(obj.temp);
} else {
res.temp = [obj.temp];
}
if(res.rain){
res.rain.push(obj.rain);
} else {
res.rain = [obj.rain];
}
if(res.wind){
res.wind.push(obj.wind);
} else {
res.wind = [obj.wind];
}
if(res.humidity){
res.humidity.push(obj.humidity);
} else {
res.humidity = [obj.humidity];
}
});
console.log(res);
我有以下数据:
var jsonData = {
"data": [
{
"id": 1,
"name": "London",
"date": "2018-04-20",
"temp": 15,
"rain": 2,
"wind": 50,
"humidity" : 80,
}
]
};
这是我目前编码的映射部分:
var mainContainer = {
temp : jsonData.data.map (a => a.temp),
rain : jsonData.data.map (a => a.rain), // jsonData.data.map (a => ) being repeated
wind : jsonData.data.map (a => a.wind), // jsonData.data.map (a => ) being repeated
humidity: jsonData.data.map (a => a.humidity) // jsonData.data.map (a => ) being repeated
};
console.log(mainContainer);
有什么方法可以DRY代码,让我不重复映射函数?唯一的区别在于 属性 名称和映射部分。
创建一个包含 属性 个要映射的名称的数组
var props = ["temp", "rain", "wind", "humidity" ];
现在使用 reduce
props
var mainContainer = props.reduce( (a,c) => {
a[c] = jsonData.data.map (s => s[c]);
return a;
}, {});
您可以循环到 data
数组,并通过检查 属性 是否已经存在来相应地创建一个新对象。
var jsonData = {
"data": [
{
"id": 1,
"name": "London",
"date": "2018-04-20",
"temp": 15,
"rain": 2,
"wind": 50,
"humidity" : 80,
},
{
"id": 1,
"name": "London",
"date": "2018-04-20",
"temp": 25,
"rain": 22,
"wind": 40,
"humidity" : 60,
}
]
};
var res = {};
jsonData.data.forEach((obj)=>{
if(res.temp){
res.temp.push(obj.temp);
} else {
res.temp = [obj.temp];
}
if(res.rain){
res.rain.push(obj.rain);
} else {
res.rain = [obj.rain];
}
if(res.wind){
res.wind.push(obj.wind);
} else {
res.wind = [obj.wind];
}
if(res.humidity){
res.humidity.push(obj.humidity);
} else {
res.humidity = [obj.humidity];
}
});
console.log(res);