....
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/