let item = {
expenseId: this.expenseId,
expenseName: this.expenseName,
isForbidden: this.isForbidden,
detailList: this.detailList //数组
}
this.item = item
console.log(this.item,'单条')
let list = []
list.push(this.item)
this.list = list //
console.log(this.list)
想拼接数组,我这样push是哪里的问题,list里边的detailList总是只保留最后一条数据,多添加几个前边的数据会被替换,detailList是一个数组,
第一次添加一条数据
然后继续添加一条数据,
那肯定啊,item的值都被改变了,数组的引用还是用一个地址,你直接this.list.push(item)就行了,不用做这么多那个什么this.item=xxx,又list.pash(this.item),this.list=list
你要把你那个添加的方法 发出来看看,你点击添加的时候触发的push操作,我在这里面没看到你对 detailList 操作过啊
detailList值总是最后一条数据解决办法
this.list.push(JSON.parse(JSON.stringify(item)))
原因:对象是引用类型,传递的是引用地址,所以你两个数组引用的是同一个对象,只要其中一个数组改变,就会导致对象改变,进而另一个引用的数组也会改
可能是因为detailList数组被声明为全局变量或者在循环中声明的局部变量没有初始化而导致每次循环都对同一个数组进行push操作,从而覆盖之前的数据。解决该问题可以将detailList声明为函数内部的局部变量并初始化,或者在每次循环时都声明一个新的数组。
以下是示例代码:
// 初始化detailList数组
let detailList = [];
// 将detailList声明为函数内部的局部变量
function yourFunction() {
let detailList = [];
// 循环中声明新数组
for (let i = 0; i < someArray.length; i++) {
let tempArr = [];
// 将数据添加到tempArr中
tempArr.push(someData);
// 将tempArr添加到detailList中
detailList.push(tempArr);
}
// 对detailList进行操作...
}
如果以上方法没有解决问题,可以提供更多的代码以供参考。