Javascript ES6还原为新对象
我有一个一年中所有日子的数组,如下所示:Javascript ES6还原为新对象,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有一个一年中所有日子的数组,如下所示: const days = ["2019-01-01", "2019-01-02", "2019-01-03" ...] 我有一个对象,用于保存特定日期的计划和已完成任务: const tasks = {"2019-01-01": {"planned": 3, "completed": 2,}, "2019-01-03": { "planned": 1, "completed": 0 }, "2019-01-10": { "planned": 1, "c
const days = ["2019-01-01", "2019-01-02", "2019-01-03" ...]
我有一个对象,用于保存特定日期的计划和已完成任务:
const tasks = {"2019-01-01": {"planned": 3, "completed": 2,}, "2019-01-03": { "planned": 1, "completed": 0 }, "2019-01-10": { "planned": 1, "completed": 1} ... }
我想要的是一个新对象,该对象包含所有日期的信息(如果任务是否已计划和完成),如下所示:
const tasksNew = {"2019-01-01": {"planned": 3, "completed": 2}, "2019-02-02": {"planned": 0, "completed": 0} ...}
我知道这在某种程度上对reduce有效,但我现在无法控制自己
const taskNew = days.reduce((acc, day) => {
if (!tasks[day]) {
return {
...acc,
[day]: {
planned: 0,
completed: 0
}
}
}
return {
...acc,
[day]: tasks[day]
}
}, {});
有关reduce的详细信息:您可以使用
reduce
将days
数组映射到tasks
对象中的键。在这里,我循环查看days
中的每一天,检查它是否在tasks
对象中。如果是,我将当前的日期
添加为键,并将其关联对象从任务
添加到新任务
对象。如果日期
不在对象中,则我将默认的完成:0
和计划:0
添加到附加的数组中:
const days=[“2019-01-01”、“2019-01-02”、“2019-01-03”],
任务={
"2019-01-01": {
“计划”:3,
“已完成”:2,
},
"2019-01-03": {
“计划”:1,
“已完成”:0
},
"2019-01-10": {
“计划”:1,
“已完成”:1
}
},
新任务=天。减少((acc,天)=>
一天的任务?
{…acc[日]:任务[日]}:
{…acc,[日]:{计划:0,完成:0}
}, {});
console.log(newTasks)代码>您可以减少创建新对象的天数。对于每一天,您将检查当天是否有任务并将其合并到结果图中,如果当天没有任务,则合并一个默认的空“指示器”:
const days=[
"2019-01-01",
"2019-01-02",
"2019-01-03",
"2019-01-04",
"2019-01-07",
"2019-01-08",
"2019-01-09",
"2019-01-10"
]
常量默认值={“已计划”:0,“已完成”:0}
常量任务={
“2019-01-01”:{“计划”:3,“完成”:2,},
“2019-01-03”:{“计划”:1,“完成”:0},
“2019-01-10”:{“计划”:1,“完成”:1}
}
const result=days.reduce(
(地图,日期)=>
assign({},map,{[day]:tasks[day]?tasks[day]:DEFAULT}),
{}
)
console.log(result)
在天数
数组中使用reduce
。对于每天,如果在任务
对象中找到一个条目,请将该条目添加到累加器中,否则,返回默认条目
这是你的电话号码
const days=[“2019-01-01”、“2019-01-02”、“2019-01-03”];
const tasks={“2019-01-01”:{“计划的”:3,“完成的”:2,},“2019-01-03”:{“计划的”:1,“完成的”:0},“2019-01-10”:{“计划的”:1,“完成的”:1};
const tasksNew=天。减少((累计,天)=>{
累计[日]=任务[日]?任务[日]:{计划:0,完成:0};
返回累计;
}, {});
console.log(tasksNew)代码>克隆任务
。将任务的键
存储在变量中。然后循环查看天
检查键
是否没有包含()
天
将其添加到对象新任务中
const days=[“2019-01-01”、“2019-01-02”、“2019-01-03”]
const tasks={“2019-01-01”:{“计划的”:3,“完成的”:2,},“2019-01-03”:{“计划的”:1,“完成的”:0},“2019-01-10”:{“计划的”:1,“完成的”:1}
const newTasks=JSON.parse(JSON.stringify(tasks));
常量键=对象键(任务);
天。forEach(天=>{
如果(!键包括(天))
新任务[日期]={已完成:0,计划:0}
}
)
console.log(newtask)
最短路径:
{...days.reduce((obj,d)=>({...obj,[d]:{ planned: 0, completed: 0 }}),{}), ...tasks}
无法找到预期对象和当前对象之间的差异天数数组包含一年中的所有365天,tasks对象仅包含特定天数的任务。我想要一个包含所有365天以及计划和完成的项目的对象