用两个日期之间的日期填充对象数组
Fill Array of Objects with Dates Between 2 Dates
我有一组对象,例如:
const dates = [
{date: "Jul 06 2018", count: 10},
{date: "Jul 08 2018", count: 1},
{date: "Jul 10 2018", count: 120},
];
我正在使用 eachDay and format functions of date-fns 生成并 "backfill" 存在于给定数组的第一个日期和最后一个日期之间的所有日期。
eachDay(
dates[0].date,
dates.slice(-1)[0].date,
)
.map(d => ({
x: d.dateCollected,
y: dates
.filter(e => d.dateCollected === format(e, 'MMM DD YYYY')),
}));
编码 returns 所有日期,但我无法将 count
值从原始数组获取到 "backfilled" 数组中。
预期结果:
const result = = [
{x: "Jul 06 2018", y: 10},
{x: "Jul 07 2018", y: 0},
{x: "Jul 08 2018", y: 1},
{x: "Jul 09 2018", y: 0},
{x: "Jul 10 2018", y: 120},
];
根据 eachDay
的文档,函数 returns 字符串值,而不是具有 dateCollected
属性 的对象。
您可以像这样产生想要的结果:
const {eachDay, format} = dateFns; // Just needed for this snippet to run
const dates = [
{date: "Jul 06 2018", count: 10},
{date: "Jul 08 2018", count: 1},
{date: "Jul 10 2018", count: 120},
];
const result = eachDay(
dates[0].date,
dates.slice(-1)[0].date,
).map(x => format(x, "MMM DD YYYY"))
.map(x => ({ x, y: (dates.find(d => d.date === x) || { count: 0 }).count }));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"></script>
您可以通过按日期创建计数查找来简化事情:
const {eachDay, format} = dateFns;
const dates = [
{date: "Jul 06 2018", count: 10},
{date: "Jul 08 2018", count: 1},
{date: "Jul 10 2018", count: 120}
];
const counts = dates.reduce((memo, {date, count}) => {
memo[date] = count;
return memo;
}, {});
const result = eachDay(
dates[0].date,
dates.slice(-1)[0].date
)
.map(d => {
const x = format(d, "MMM DD YYYY");
return {x, y: counts[x] || 0};
})
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"></script>
我有一组对象,例如:
const dates = [
{date: "Jul 06 2018", count: 10},
{date: "Jul 08 2018", count: 1},
{date: "Jul 10 2018", count: 120},
];
我正在使用 eachDay and format functions of date-fns 生成并 "backfill" 存在于给定数组的第一个日期和最后一个日期之间的所有日期。
eachDay(
dates[0].date,
dates.slice(-1)[0].date,
)
.map(d => ({
x: d.dateCollected,
y: dates
.filter(e => d.dateCollected === format(e, 'MMM DD YYYY')),
}));
编码 returns 所有日期,但我无法将 count
值从原始数组获取到 "backfilled" 数组中。
预期结果:
const result = = [
{x: "Jul 06 2018", y: 10},
{x: "Jul 07 2018", y: 0},
{x: "Jul 08 2018", y: 1},
{x: "Jul 09 2018", y: 0},
{x: "Jul 10 2018", y: 120},
];
根据 eachDay
的文档,函数 returns 字符串值,而不是具有 dateCollected
属性 的对象。
您可以像这样产生想要的结果:
const {eachDay, format} = dateFns; // Just needed for this snippet to run
const dates = [
{date: "Jul 06 2018", count: 10},
{date: "Jul 08 2018", count: 1},
{date: "Jul 10 2018", count: 120},
];
const result = eachDay(
dates[0].date,
dates.slice(-1)[0].date,
).map(x => format(x, "MMM DD YYYY"))
.map(x => ({ x, y: (dates.find(d => d.date === x) || { count: 0 }).count }));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"></script>
您可以通过按日期创建计数查找来简化事情:
const {eachDay, format} = dateFns;
const dates = [
{date: "Jul 06 2018", count: 10},
{date: "Jul 08 2018", count: 1},
{date: "Jul 10 2018", count: 120}
];
const counts = dates.reduce((memo, {date, count}) => {
memo[date] = count;
return memo;
}, {});
const result = eachDay(
dates[0].date,
dates.slice(-1)[0].date
)
.map(d => {
const x = format(d, "MMM DD YYYY");
return {x, y: counts[x] || 0};
})
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"></script>