首页 > 解决方案 > 为什么用其他初始化数组,导致其他数组改变

问题描述

我有一周的常量数组(名为“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 数组?**

标签: reactjsreact-native

解决方案


您有一组对对象的引用。如果你复制数组,你就有一个副本……但每个复制的元素仍然是对同一个对象的引用。

你需要做:

let availableHours = allHours.map((el) => { ...el });

推荐阅读