我正在尝试将阵列推入另一个阵列。数据正在父数组中填充,但在填充记录之后,它将覆盖父数组中的所有记录。这里我已经写了我的代码。请告诉我哪里出错了?
在这里,我试图创建一个类似csv文件头值作为键和csv文件记录作为值的模型。
let csvArr: any[] = [];
for (let i = 1; i < csvRecordsArray.length; i++) {
let curruntRecord = (<string>csvRecordsArray[i]).split(',');
if (curruntRecord.length == headerLength) {
let headerRecord: {};
headerRecord = this.headersRowData
for(let j = 0; j < this.headersRowData.length; j++){
headerRecord[this.headersRowData[j]] = curruntRecord[j].trim()
}
csvArr.push(csvRecord)
}
}
headerrowdata将从csv文件中读取头,该文件是任意[]的数组类型。
csvrecord正在按照文件和循环获取正确的数据,但在推入csvarr时,csvarr中的所有现有记录都会被覆盖。那么如何解决这个覆盖问题呢?
1条答案
按热度按时间llmtgqce1#
没有
csvRecord
在代码中的任何地方定义,所以我假设,您实际上是在推动headerRecord
到阵列?如果是这样的话,答案是显而易见的。你总是在分配任务
它不创建新对象,只指定
headerRecord
作为对this.headerRowData
. 因此,它们都指向相同的内存位置。当你这样做的时候您只是将对同一对象的附加引用添加到数组中。实际上,数组的所有元素都指向内存中的同一个位置。然后在循环体中更新
headerRecord
对象通过这个更新,您当然也在更新所有其他指向这个对象的引用。因此,它似乎覆盖了许多元素。但实际上,它只是改变了一个元素,但所有其他元素也都指向同一个元素,因此也反映了这些变化。所以不是
照办
这将在每次迭代中创建并添加一个与其他对象无关的新对象。。。