3 回答
TA贡献1877条经验 获得超1个赞
不确定上面的代码行包含在哪个函数中...无论如何,为了保留以前的数组值,您确实需要将其定义devEvent为全局变量。意思是,let drvEvent = [];应该写在函数之外。
let ls, lS, ne; // To access outside of if blocks
if (allCheck['drloadshed']) {
ls = drEvents;
ls.push('LOADSHED'); //LOADSHED
} else if (allCheck['drloadshift']) {
lS = drEvents;
lS.push('LOADSHIFT'); //both checked
} else if (allCheck['drneutral']) {
ne = drEvents;
ne.push('NEUTRAL'); //both checked
}
TA贡献1826条经验 获得超6个赞
尝试创建 的克隆drEvents以避免改变实际数组:
let ls, lS, ne;
if (allCheck['drloadshed']) {
let ls = [...drEvents];
ls.push('LOADSHED'); //LOADSHED
} else if (allCheck['drloadshift']) {
let lS = [...drEvents];
lS.push('LOADSHIFT'); //both checked
} else if (allCheck['drneutral']) {
let ne = [...drEvents];
ne.push('NEUTRAL'); //both checked
}
TA贡献1820条经验 获得超2个赞
在 if 条件之外声明变量。当您使用 let 关键字声明时,它只能在该代码块内(在您的情况下的 if 条件内)访问。
let drEvent = [];
let ls = [...drEvents];
let lS = [...drEvents];
let ne = [...drEvents];
if (allCheck['drloadshed']) {
ls.push('LOADSHED'); //LOADSHED
} else if (allCheck['drloadshift']) {
lS.push('LOADSHIFT'); //both checked
} else if (allCheck['drneutral']) {
ne.push('NEUTRAL'); //both checked
}
为了避免覆盖同一数组,您可以使用扩展运算符 (...) 创建同一数组的副本。要详细了解发生这种情况的原因,您可以搜索按值传递和按引用传递(原始数据类型和引用数据类型)之间的差异。
添加回答
举报