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天以及计划和完成的项目的对象