所以我有一個 API,它回傳過去 7 天分配的水的值,它可以包含一個空陣列或一個值,例如:
[
{
day: Monday,
waterDispensed: 40,
},
{
day: Wednesday,
waterDispensed: 83,
},
{
day: Thursday,
waterDispensed: 33,
},
]
假設今天是星期四,我需要一組物件來填補最近 7 天缺失的資料:
[
{
day: Friday, // 25th Feb
waterDispensed: 0,
},
{
day: Saturday, // 26th Feb
waterDispensed: 0,
},
{
day: Sunday, // 27th Feb
waterDispensed: 0,
},
{
day: Monday,
waterDispensed: 40,
},
{
day: Tuesday,
waterDispensed: 0,
},
{
day: Wednesday,
waterDispensed: 83,
},
{
day: Thursday, // 3rd March
waterDispensed: 33,
},
]
考慮到您只需要使用一個回圈,您將如何做到這一點?您可以使用條件陳述句,但不能像新手那樣使用。您可以使用陣列方法,但應考慮時間復雜度。
uj5u.com熱心網友回復:
首先創建您需要的作業日陣列。為此,您可以使用包含星期幾的陣列,將其翻倍,然后切出與您需要的實際范圍相對應的部分。
然后將其轉換為具有 0 值的物件陣列,最后用您從回應中獲得的物件覆寫該陣列中的物件:
const dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
function fillWeek(date, data) {
const weekday = date.getDay();
const week = dayNames.concat(dayNames).slice(weekday 1, weekday 8);
let result = week.map(day => ({day, waterDispensed: 0 }));
for (let obj of data) result[week.indexOf(obj.day)] = obj;
return result;
}
const data = [
{ day: "Monday", waterDispensed: 40 },
{ day: "Wednesday", waterDispensed: 83 },
{ day: "Thursday", waterDispensed: 33 },
]
// Let's assume a Thursday (3 March 2022 is a Thursday):
let result = fillWeek(new Date(2022, 2, 3), data);
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436467.html
標籤:javascript 节点.js 数组 算法 数据结构
