angular - การแทนค่าภายในอาเรย์ใน TypeScript
ฉันมีอาร์เรย์ localData กำหนดไว้ดังนี้:
public localData: Array<any> = [];
ในตัวอย่างด้านล่างมีความยาว 2 และมีค่าดังต่อไปนี้ในเครื่องมือของนักพัฒนา
(2) [{…}, {…}]
0:
Country: "United States"
DataSource: ""
FunctionName: "Customer Service"
GroupName: "Main"
Index: 0
Result: undefined
StartDate: "5/1/2012"
StopDate: "
"
1:
Country: "United States"
DataSource: ""
FunctionName: "Customer Service"
GroupName: "Main"
Index: 1
Result: undefined
StartDate: ""
StopDate: "5/1/2019
"
__proto__: Object
length: 2
__proto__: Array(0)
ฉันจำเป็นต้องแทนค่าของ DataSource ด้วยค่าใหม่ ถ้ามันว่างหรือถ้ามีค่าอื่นใด ให้เป็นค่าหนึ่งที่กำหนดไว้ ฉันพยายามทำดังนี้:
this.localData.forEach(x => x.DataSource ? '' || 'XXX' : 'MyVAL');
โค้ดนี้ไม่เกิดข้อผิดพลาดใด ๆ แต่ DataSource ยังคงว่างอยู่ มีใครเคยเจอปัญหานี้มาก่อนหรือรู้ว่าทำไมถึงเกิดขึ้นหรือไม่?
คำตอบ #1
คุณไม่ได้ใช้การมอบหมายงาน ตามที่ Doc อธิบาย forEach จะรันฟังก์ชันที่ให้มาสำหรับแต่ละองค์ประกอบ และฟังก์ชันของคุณเพียงแค่ส่งค่าบูลีนถ้า x.DataSource มีอยู่ มิฉะนั้นจะส่งสตริง
ถ้าเป้าหมายของคุณคือการเปลี่ยนแปลงอาร์เรย์ของคุณ คุณสามารถปรับฟังก์ชันของคุณด้วยการกำหนดค่า:
this.localData.forEach(x => {
x.DataSource = x.DataSource ? '' || 'XXX' : 'MyVAL'
});
หรือง่าย ๆ ใช้ฟังก์ชัน map
this.localData = this.localData.map( item => {
item.DataSource = item.DataSource ? '' || 'XXX' : 'MyVAL'
return item;
});
คำชี้แจง: ในบรรทัดโค้ดของคุณ
this.localData.forEach(x => x.DataSource ? '' || 'XXX' : 'MyVAL');
ตัวดำเนินการแบบ ternary จะคืนค่า 'MyVAL' ถ้า x.DataSource ไม่ได้กำหนดหรือเป็นสตริงว่าง และจะคืนค่า 'XXX' เสมอในกรณีอื่นทั้งหมด ถ้าฉันเข้าใจถูก คุณต้องการทำบางอย่างแบบนี้:
x.DataSource && x.DataSource !== 'XXX' ? 'MyVAL' : x.DataSource;
ซึ่งสามารถอ่านได้ว่า: ถ้า DataSource ถูกประเมินและมันแตกต่างจาก 'XXX' ให้กำหนดค่า 'MyVal', คงค่าเดิมไว้ในกรณีอื่น
แก้ไข: ชี้แจง
คำตอบ #2
ลองทำตามวิธีนี้:
this.localData.forEach(x => (!x.DataSource || x.DataSource === 'XXX') ? 'MyVAL' : x.DataSource);
ที่ไหน
!x.DataSource หมายถึง x.DataSource === ''
