reactjs - 为什么用其他初始化数组,导致其他数组改变
问题描述
我有一周的常量数组(名为“allHours”):
export const allHours = [
{ hour: "10:00", key: 0, busy: false },
{ hour: "11:00", key: 1, busy: false },
{ hour: "12:00", key: 2, busy: false },
{ hour: "13:00", key: 3, busy: false },
{ hour: "14:00", key: 4, busy: false },
{ hour: "15:00", key: 5, busy: false },
{ hour: "16:00", key: 6, busy: false },
{ hour: "17:00", key: 7, busy: false },
{ hour: "18:00", key: 8, busy: false },
{ hour: "19:00", key: 9, busy: false },
];
现在我想循环它并为每次迭代操作新数组(availableHours),所以在for循环之后我放:让availableHours = [...allHours];
代码是:
export const getAvailableMeetings = meetings => {
const finalArray = [];
for (let i = 0; i < 7; i++) {
let availableHours = [...allHours];///// here i expected to see the
///// availableHours array initialize again and all the busy field - initialize to false in each iterate
const date = moment().add(i, "days");
meetings.map(meet => {
if (moment(meet.date).startOf("day").isSame(date.startOf("day"), "days")) {
console.log("start of iterate", date.startOf("day"), "strartof meetings", moment(meet.date).startOf("day"));
let busyHour = availableHours.findIndex(i => i.hour === moment(meet.date).format("LT"));
availableHours[busyHour].busy = true;
}
});
finalArray.push({
key: i,
date: date.toISOString(),
dayName: moment().add(i, "days").format("dddd"),
hours: date.weekday() === 5 || date.weekday() === 6 ? [] : availableHours,
});
}
return finalArray;
};
关于代码中的注释, 我希望在每次迭代时初始化可用小时。 但实际上它不是,并继续填充半身像,当我控制台记录“allHours”数组时,我看到忙字段由可用时间改变
**这里的重点是为什么 allHours 数组更改为 availableHours 数组?**
解决方案
您有一组对对象的引用。如果你复制数组,你就有一个副本……但每个复制的元素仍然是对同一个对象的引用。
你需要做:
let availableHours = allHours.map((el) => { ...el });
推荐阅读
- google-colaboratory - KeyBERT 包不适用于 Google Colab
- gradle-kotlin-dsl - 如何将`apply(plugin = "java")`和idea插件放入外部gradle.kts文件
- python - 在 selenium python 中向下滚动二级页面
- java - Spring ElasticSearch:组合多个查询时出现问题
- reactjs - 如何使用 Typescript 在反应函数中传递参数
- reactjs - 为什么 SwiperJS React 的鼠标滚轮功能不起作用?
- android - 如何将 JSONObject 转换为 JSONArray?
- python - 无法从同一目录导入文件
- django - 使用类基础视图在 django3 中登录表单
- r - 用百分比标记堆栈条形图