如何创建日期计数器?我尝试使用 reduce 函数
How to create a date counter ? i tried it using reduce function
使用 id、billStatus 和 tDate 需要制作一个日计数器来计算收到潜在客户的日期。示例 => 对于 id:"1" 2 可在 5 月 8 日计费 AND 3 可在 5 月 9 日计费 比天计数器将变为 => 1+1 = 2
注意:如果我一天有 1 个潜在客户或 7 个潜在客户,daycount 将为 1 并在第二天有新潜在客户时递增。
data: [
{ id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Non-Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 6 },
{ id: "1", billStatus: "Non-Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "3", billStatus: "Billable", tDate: "05/10/2020", dayCounter: 0 },
{ id: "2", billStatus: "Billable", tDate: "05/10/2020", dayCounter: 0 },
{ id: "2", billStatus: "Non-Billable", tDate: "05/10/2020", dayCounter: 0 },
],
retult:
data: [
{ id: "1", dayCounter: 0 },
{ id: "2", dayCounter: 2 },
{ id: "3", dayCounter: 1 }]
您可以查看此解决方案。虽然我不清楚你的预期输出。但希望它能给你一些想法。
const data = [
{ id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Non-Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 6 },
{ id: "1", billStatus: "Non-Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "3", billStatus: "Billable", tDate: "05/10/2020", dayCounter: 0 },
{ id: "2", billStatus: "Billable", tDate: "05/10/2020", dayCounter: 0 },
{ id: "2", billStatus: "Non-Billable", tDate: "05/10/2020", dayCounter: 0 },
];
const billableDates = data.reduce((res, obj) => {
if (!res[obj.id]) {
if (obj.billStatus === "Billable") {
res[obj.id] = { dates: new Set() };
res[obj.id].dates.add(obj.tDate);
}
} else {
res[obj.id].dates.add(obj.tDate);
}
return res;
}, {});
const modifiedData = data.reduce((store, obj) => {
if (!store[obj.id] && obj.billStatus === "Billable") {
store[obj.id] = obj;
store[obj.id].dayCounter = billableDates[obj.id].dates.size;
store[obj.id].dates = [...billableDates[obj.id].dates];
}
return store;
}, {});
console.log(Object.values(modifiedData));
使用 id、billStatus 和 tDate 需要制作一个日计数器来计算收到潜在客户的日期。示例 => 对于 id:"1" 2 可在 5 月 8 日计费 AND 3 可在 5 月 9 日计费 比天计数器将变为 => 1+1 = 2
注意:如果我一天有 1 个潜在客户或 7 个潜在客户,daycount 将为 1 并在第二天有新潜在客户时递增。
data: [
{ id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Non-Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 6 },
{ id: "1", billStatus: "Non-Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "3", billStatus: "Billable", tDate: "05/10/2020", dayCounter: 0 },
{ id: "2", billStatus: "Billable", tDate: "05/10/2020", dayCounter: 0 },
{ id: "2", billStatus: "Non-Billable", tDate: "05/10/2020", dayCounter: 0 },
],
retult:
data: [
{ id: "1", dayCounter: 0 },
{ id: "2", dayCounter: 2 },
{ id: "3", dayCounter: 1 }]
您可以查看此解决方案。虽然我不清楚你的预期输出。但希望它能给你一些想法。
const data = [
{ id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Non-Billable", tDate: "05/08/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 6 },
{ id: "1", billStatus: "Non-Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "1", billStatus: "Billable", tDate: "05/09/2020", dayCounter: 0 },
{ id: "3", billStatus: "Billable", tDate: "05/10/2020", dayCounter: 0 },
{ id: "2", billStatus: "Billable", tDate: "05/10/2020", dayCounter: 0 },
{ id: "2", billStatus: "Non-Billable", tDate: "05/10/2020", dayCounter: 0 },
];
const billableDates = data.reduce((res, obj) => {
if (!res[obj.id]) {
if (obj.billStatus === "Billable") {
res[obj.id] = { dates: new Set() };
res[obj.id].dates.add(obj.tDate);
}
} else {
res[obj.id].dates.add(obj.tDate);
}
return res;
}, {});
const modifiedData = data.reduce((store, obj) => {
if (!store[obj.id] && obj.billStatus === "Billable") {
store[obj.id] = obj;
store[obj.id].dayCounter = billableDates[obj.id].dates.size;
store[obj.id].dates = [...billableDates[obj.id].dates];
}
return store;
}, {});
console.log(Object.values(modifiedData));