ES6还原为新对象

Oli*_*ver 3 javascript ecmascript-6 reactjs

我一年四季都有这样的数组:

const days = ["2019-01-01", "2019-01-02", "2019-01-03" ...]
Run Code Online (Sandbox Code Playgroud)

我有一个对象可以保存特定日期的计划和完成的任务:

const tasks = {"2019-01-01": {"planned": 3, "completed": 2,}, "2019-01-03": { "planned": 1, "completed": 0 }, "2019-01-10": { "planned": 1, "completed": 1} ... }
Run Code Online (Sandbox Code Playgroud)

我想要的是一个新对象,该对象包含整天的信息(无论任务是否计划和完成),如下所示:

const tasksNew = {"2019-01-01": {"planned": 3, "completed": 2}, "2019-02-02": {"planned": 0, "completed": 0} ...}
Run Code Online (Sandbox Code Playgroud)

我知道这在某种程度上可以与reduce一起使用,但目前我无法帮助自己。

jo_*_*_va 5

reduce在您的days阵列上使用。对于每天在tasks对象中找到的条目,将其添加到累加器中,否则,返回默认条目。

这是Array.reduce()上MDN文档

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 = days.reduce((accum, day) => {
  accum[day] = tasks[day] ? tasks[day] : { planned: 0, completed: 0 };
  return accum;
}, {});

console.log(tasksNew);
Run Code Online (Sandbox Code Playgroud)