更改组件文件中的数据参数时遇到问题:
this.commandList.ListesCommandesATransmettre.forEach(data => {
this.catalogs.forEach(catalog => {
if (catalog.Libelle === data.Catalogue) {
if (catalog.selected === false) {
console.log(data.isSelected)
data.isSelected = false;
console.log(data.isSelected)
console.log(data);
}
}
})
});
此代码显示:
true
错误
但是isSelected
中console.log(data)
的值仍然是true
。那么,为什么false
是结果?
答案 0 :(得分:0)
如果是回调的循环问题,请尝试
for (let data of this.commandList.ListesCommandesATransmettre) {
for (let catalog of this.catalogs) {
if (catalog.Libelle === data.Catalogue) {
if (catalog.selected === false) {
console.log(data.isSelected)
data.isSelected = false;
console.log(data.isSelected)
console.log(data);
}
}
}
}
答案 1 :(得分:0)
我无法理解您的代码的逻辑。如果this.catalogs
有许多符合条件的目录会怎样? isSelected
将多次设置为false。
也许可行(如果我理解您的逻辑):
this.commandList.ListesCommandesATransmettre = this.commandList.ListesCommandesATransmettre.map(data => {
const mutateData = Object.assign({}, data);
// If condition math, then isSelected set in false. Else, isSelected keep the his value
mutateData.isSelected =
this.catalogs.some(catalog => catalog.Libelle === data.Catalogue && !catalog.selected) ? false : mutateData.isSelected;
return mutateData;
})
答案 2 :(得分:0)
请尝试使用此代码来测试其是否正确更新。循环将告诉您正确/错误,然后您就可以查看更新数据中的情况。
this.commandList.ListesCommandesATransmettre.forEach((data, index) => {
this.catalogs.forEach(catalog => {
if (catalog.Libelle === data.Catalogue) {
if (catalog.selected === false) {
data.isSelected = false;
}
console.log(index + 'is selected: ' + data.isSelected)
}
})
});
console.log(this.commandlist);
我注意到的是,Web浏览器只会在内存中保留对象的“最新”引用。因此,在循环结束后,“最新”引用是最后一个引用。因此,您可能正在查看的是最后一个对象,而不是要测试的对象。如果其他人知道更多信息,或者对实际发生的事情有参考,请编辑这篇文章。