首页 > 解决方案 > 替换对象数组

问题描述

我有以下对象数组

const array = [
   { home1: "05:45", dayOfWeek: 1, away: "09:30"},
   { home1: "05:15", dayOfWeek: 2, away: "09:30"},
   { home1: "17:30", dayOfWeek: 5, away: "09:30"},
   { home1: "16:30", dayOfWeek: 7, away: "09:30"}
]

我有四个dayOfWeek(1,2,5,7)。现在我需要用虚拟对象 ( ) 推动剩余的三个 (3,4,6 { home1: "05:30", dayOfWeek: 7, away: "09:30"})

现在逻辑部分是我不知道dayOfWeek数组中存在哪些。可能只有一个、两个、三个或空白。7我每次都需要在那个数组中推送天数。

如何做到这一点?请建议我最好的方法

谢谢!!!

标签: javascriptarrayslodash

解决方案


一种选择是Set到目前为止包含在数组中的日期中,然后从 1 迭代到 7,push如果该日期不包含在集合中,则将新对象添加到数组中:

const array = [
   { home1: "05:45", dayOfWeek: 1, away: "09:30"},
   { home1: "05:15", dayOfWeek: 2, away: "09:30"},
   { home1: "17:30", dayOfWeek: 5, away: "09:30"},
   { home1: "16:30", dayOfWeek: 7, away: "09:30"}
];
const dummy = { home1: "05:30", away: "09:30" };
const days = new Set(array.map(({ dayOfWeek }) => dayOfWeek));
for (let i = 1; i <= 7; i++) {
  if (!days.has(i)) array.push({ ...dummy, dayOfWeek: i });
}
console.log(array);

我使用 aSet来降低复杂性,但我想如果您只需要 7 个对象,那没关系,您可以使用find而不事先创建集合

const array = [
   { home1: "05:45", dayOfWeek: 1, away: "09:30"},
   { home1: "05:15", dayOfWeek: 2, away: "09:30"},
   { home1: "17:30", dayOfWeek: 5, away: "09:30"},
   { home1: "16:30", dayOfWeek: 7, away: "09:30"}
];
const dummy = { home1: "05:30", away: "09:30" };
for (let i = 1; i <= 7; i++) {
  if (!array.find(({ dayOfWeek }) => dayOfWeek === i)) {
    array.push({ ...dummy, dayOfWeek: i });
  }
}
console.log(array);


推荐阅读