javascript - 数组自动更改值

标签 javascript arrays typescript ionic4

....
import * as XLSX from 'xlsx';
...

我在 Ionic 4 中读取一个 .xlsx 文件

showData() {
  let fileReader = new FileReader();
  fileReader.onloadend = (e) => {
    this.arrayBuffer = fileReader.result;
    let data = new Uint8Array(this.arrayBuffer);
    let arr = new Array();
    for (let i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
    let bstr = arr.join("");
    let  workbook = XLSX.read(bstr, { type: "binary" });
    let first_sheet_name = workbook.SheetNames[0];
    let worksheet = workbook.Sheets[first_sheet_name];
    let rows = XLSX.utils.sheet_to_json<Income>(worksheet, { raw: true });

    this.allIncomesFromDocument = rows 
    this.Test(rows)    
  }
  fileReader.readAsArrayBuffer(this.file);
}

Test(rows){
  this.allIncomesFromDocument.forEach( v => console.log(v.quantity) ) // FIRST LOG

  rows.forEach( row =>{
    row.quantity = 0;
  })

  this.allIncomesFromDocument.forEach( v => console.log(v.quantity) ) // SECCOND LOG
}

在我的第一个日志中

8
7
5
9
2
etc.

我在文件中的数据

但我从不更改值,只重复相同的 forEache 和我拥有的日志

0
0
0
ect.

日志完全不同

最佳答案

当你这样做时 this.allIncomesFromDocument = 行 您实际上是在分配一个引用,而不是复制数据。

这意味着当你这样做时 row.quantity = 0; 您正在更新引用,这两个变量都是变量。

如果你改变 this.allIncomesFromDocument = 行this.allIncomesFromDocument = JSON.parse(JSON.stringify(rows)) 您将创建数据的完整副本,而不仅仅是分配引用。

关于javascript - 数组自动更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58924603/

相关文章:

java - 无法在 for-each 循环中写入 "i+2"作为后置条件 [Java]

javascript - D3 - 图例无法可视化

C# 将数组传递给 Visual Basic 库

c - 用 char 数组成员填充 union

javascript - Angular 6 中的 (keydown) 事件的多键绑定(bind)

typescript - Typescript 用户定义类型/对象的数组作为 Lit v2 中的属性

css - 如何从我的网站中删除加载了脚本标签的 css 以及该脚本标签的删除?

javascript - 从客户端javascript发送数据到 Node js

php - 您将如何自动检测 Textile 与 Markdown?

javascript - 在编辑内容中的 Dnn Site 中添加更多字体名称