ค้นหาเว็บไซต์

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 === ''

บทความที่เกี่ยวข้อง