记录工作中遇到的问题一二
有问题的
let replySuppliers = res.Result.ReplySuppliers
let origins = res.Result.Origins
for(let j= 0,len = replySuppliers.length;j<len;j++) {
let p = replySuppliers[j]
p.origins = origins
for(let i = 0,len = p.origins.length;i<len;i++) {
let origin = origins[i]
origin.checked = false
origin.canCheckPartCount = 0
}
p.checkedOrigins = []
p.compareTotalPrice = 0 // 已选总计
for(let k= 0,len = p.ReplyParts.length;k<len;k++) {
let part = p.ReplyParts[k]
for(let i = 0,len = part.ReplyPrices.length;i<len;i++) {
part.ReplyPrices[i].checked = false // 每个配件里的价格默认为非选中
// 如果价格不等于0则可以选中的配件数+1
if(part.ReplyPrices[i].Price != 0) {
p.origins[i].canCheckPartCount += 1
}
}
}
}
目的是给每个供应商赋值一个品质列表(Origins,后端返回与ReplySuppliers同级),结果发现赋值时循环到下一个供应商会把上一个供应商的origins覆盖掉,对origins操作时两边会同步更新数据(联想到赋值和浅拷贝问题)
解决后的
定义一个临时来接收这个res.Result.Origins,循环拿到需要用到的字段,用供应商的索引j来动态命名变量再进行赋值
let replySuppliers = res.Result.ReplySuppliers
let origins = res.Result.Origins
for(let j= 0,len = replySuppliers.length;j<len;j++) {
let p = replySuppliers[j]
let tempOriginsArr = []
let tempOriginsObj = {}
for(let i = 0,len = origins.length;i<len;i++) {
let origin = origins[i]
let obj = {
Origin: origin.Origin,
checked: false,
canCheckPartCount: 0
}
tempOriginsArr.push(obj)
}
tempOriginsObj['origin'+j] = tempOriginsArr
p.origins = tempOriginsObj['origin'+j]
p.checkedOrigins = []
p.compareTotalPrice = 0 // 已选总计
for(let k= 0,len = p.ReplyParts.length;k<len;k++) {
let part = p.ReplyParts[k]
for(let i = 0,len = part.ReplyPrices.length;i<len;i++) {
part.ReplyPrices[i].checked = false // 每个配件里的价格默认为非选中
// 如果价格不等于0则可以选中的配件数+1
if(part.ReplyPrices[i].Price != 0) {
p.origins[i].canCheckPartCount += 1
}
}
}
}