我有两个正在处理的页面,并且都返回一个对象数组。当我使用以下代码时,新结果有效:
this.adminService.waiversGetAll()
.subscribe((data: Waiver[]) => {
this.waivers = data;
this.waivers.forEach((e) => {
if(e.has_signed === true) {
e.url = `<a href="${e.signatureUrl}">View</a>`
} else {
e.url = `<a href="${e.url}">${e.message}</a>`;
}
return e;
});
console.log(this.waivers);
})
}
但是当我尝试对不同的数组执行相同的操作(我需要更新嵌套在其中的数组的值)时,我没有得到更新的值:
this.adminService.GetUnsignedWaivers()
.subscribe((data: Player[]) => {
console.log("data",data);
data.forEach(e => {
let record: Object = {};
for(let i = 0; i < e.waivers.length; i++) {
console.log(e.waivers[i].has_signed);
if (e.waivers[i].has_signed === true) {
e.waivers[i].url = e.waivers[i].signatureUrl;
console.log(e.waivers[i].url);
e.waivers[i].message = "View Waiver";
} else {
e.waivers[i].url = e.waivers[i].url;
e.waivers[i].message = e.waivers[i].message;
}
console.log(e.waivers[i].message);
return;
};
return e;
});
this.size = this.players.length;
console.log(this.players);
})
}
当我查看e.waivers [i] .has_signed的console.log时,数据是正确的,但是之后是不正确的。
要完成此工作我需要做什么?我试过在foreach中使用for循环,以及其他一堆东西。
提供给循环的数据提供如下信息:
{
buyer: "email@someaddress.edu"
event: "COED A"
field: "Main"
net: null
player: {shirtSize: null, avp_id: 12345678, adult: true, …}
team: null
waivers: [{
email: "someemail@gmail.com",
has_signed: true,
message: "Liability Waiver",
signatureUrl: "https://somelink.pdf",
url: "https://somelink.com/somekeyidentifier"
}
如果玩家已经签署了弃权书,将会有一个signatureUrl字段,并且消息应该显示“ View Waiver”,而不是告诉我他们将签署哪种弃权书的消息。我希望将URL签名时设置为signatureUrl,因此可以在不喜欢数据操作的表中使用它。
我得到的是1600条记录,这些记录显示了好像每个人都没有签名的url,但是当我在内部循环中console.log has_signed时,对于应该显示signatureUrl的记录则显示TRUE。
答案 0 :(得分:2)
快速查看它,在return
循环中有一个for
语句,这将阻止它在第一次迭代后运行。
答案 1 :(得分:1)
首先将所有return语句放入代码中。接下来,使用{
"result":[0, 2]
}
代替map
,因为前者将为您返回新的操作数组,而后者仅用于迭代目的。
您在forEach
中的代码将变为:
subscribe
最后将修改后的data.waivers = data.waivers.map((waiver) => {
if (waiver.has_signed) {
// your logic goes here...
waiver.url = waiver.signatureUrl;
waivers.message = "View Waiver";
}
// No else is required as you are just reassigning with same values
});
this.playerDetails = data;
绑定到模板中。