来访~101756 文章~106 评论~25
2022年5月10日 作者 张临志

jeecgboot 前端引用传递问题发现处理

项目中采购批次码打印一条采购单据需要打多张码,调试时发现自定义的码printCode 后缀(1/3)、(2/3)、(3/3)全部变为(3/3)、(3/3)、(3/3)展示出来了,代码如下

  let newArr = []
  for (let i = 0; i < record.length; i++) {
    if (record[i].printNum==null||record[i].printNum=='') {
      record[i].printNum = 1
    }
    let a = 1;
    for (let j=0;j<record[i].printNum;j++) {
      console.log(a)
      record[i].printCode = record[i].batchNo + '('+a+'/'+record[i].printNum+')'
      console.log(record[i])
      newArr.push(record[i])
      a +=1
    }
  }

上述代码存在数组newArr里面的printCode值 会被最后一条record[i]更新,原因是record[i]共用一条内存地址,newArr.push需要将新的一条record[i]放到新的内存地址中,需要将newArr.push(record[i])改为newArr.push({…record[i]})