【问题标题】:copy previous array values with current push javascript使用当前推送 javascript 复制先前的数组值
【发布时间】:2020-11-09 06:53:36
【问题描述】:

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

   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'); 
          } 

【问题讨论】:

  • 你能分享你的全部代码吗?
  • 你真的想在 if 检查之后合并 drEvent 和 drEvents 数组吗?
  • let ls = drEvents; 不会复制drEvents,这两个变量都指向同一个数组。此外,ls 只能在 if 块内访问。

标签: javascript arrays push


【解决方案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
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在 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
            } 
      

      为避免覆盖同一个数组,您可以使用扩展运算符 (...) 创建同一个数组的副本。 要详细了解为什么会发生这种情况,您可以搜索按值传递和按引用传递(原始数据类型和引用数据类型)之间的差异。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-16
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-26
        相关资源
        最近更新 更多