使用当前推送 javascript 复制以前的数组值

我正在尝试在条件匹配条件时推送值,并将值推送到合并最后添加值的数组。但数组被匹配的条件覆盖。


   let Event = [];

          if (allCheck['event1']) {

            let ls = Event;

            ls.push('Type1');

          } else if (allCheck['event3']) {

            let ls = Event;

            lS.push('Type2');

          } else if (allCheck['event3']) {

            let ls = Event;

            ne.push('Type3'); 

          } 


守着一只汪
浏览 93回答 3
3回答

冉冉说

不确定上面的代码行包含在哪个函数中...无论如何,为了保留以前的数组值,您确实需要将其定义devEvent为全局变量。意思是,let drvEvent = [];应该写在函数之外。let ls, lS, ne; // To access outside of if blocksif (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}

跃然一笑

尝试创建 的克隆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      } 

DIEA

在 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      } 为了避免覆盖同一数组,您可以使用扩展运算符 (...) 创建同一数组的副本。要详细了解发生这种情况的原因,您可以搜索按值传递和按引用传递(原始数据类型和引用数据类型)之间的差异。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript