ค่อนข้างตรงไปตรงมา
ฉันต้องสร้างฟังก์ชัน objOfMatches
ที่ยอมรับสองอาร์เรย์และการโทรกลับ objOfMatches จะสร้างวัตถุและส่งคืน ในการสร้างวัตถุ objOfMatches
จะทดสอบแต่ละองค์ประกอบของอาร์เรย์แรกโดยใช้การเรียกกลับเพื่อดูว่าเอาต์พุตตรงกับองค์ประกอบที่เกี่ยวข้อง (ตามดัชนี) ของอาร์เรย์ที่สองหรือไม่ หากมีข้อมูลที่ตรงกัน องค์ประกอบจากอาร์เรย์แรกจะกลายเป็นคีย์ในออบเจ็กต์ และองค์ประกอบจากอาร์เรย์ที่สองจะกลายเป็นค่าที่สอดคล้องกัน
function objOfMatches(array1, array2, callback) {
//create obj
var obj = {}
//loop thru first array
for(let i = 0; i < array1.length; i++) {
for (let j = 0; j < array2.length; j++) {
if (callback(array1[i]) === array2[j]) {
obj.array1[i] = array2[j];
}
}
}
return obj;
}
console.log(objOfMatches(['hi', 'howdy', 'bye', 'later', 'hello'], ['HI', 'Howdy', 'BYE', 'LATER', 'hello'], function(str) { return str.toUpperCase(); }));
// should log: { hi: 'HI', bye: 'BYE', later: 'LATER' }
ดูค่อนข้างเรียบง่าย แต่ฉันไม่เข้าใจว่าทำไมมันถึงส่ง TypeError ในคอนโซล (TypeError: Cannot set property '0' of undefined)
ใครสามารถอธิบายสิ่งที่เกิดขึ้น?
obj[array1[i]] = array2[j];
- person Ori Drori   schedule 13.09.2018obj.array1[i] = array2[j]
; ดูเหมือนไม่ใช่ข้อผิดพลาดทางไวยากรณ์ ฉันผิดอย่างชัดเจน - person leonardofed   schedule 13.09.2018obj.array1[i] = array2[j]
->ตั้งค่าดัชนี i ของอาร์เรย์คุณสมบัติ obj เป็นค่า และไม่ได้ตั้งค่าคีย์ตามชื่อของข้อความที่อยู่ในดัชนี i ในอาร์เรย์ - person Ori Drori   schedule 13.09.2018'hello'
จึงไม่เป็นส่วนหนึ่งของผลลัพธ์ที่คุณคาดหวัง - person connexo   schedule 14.09.2018howdy
ถึงไม่อยู่ในนั้นด้วย? นี่เป็นอะไรก็ได้นอกจาก ค่อนข้างตรงไปตรงมา - person connexo   schedule 14.09.2018