ความท้าทายนี้ทำให้ฉันนิ่งงันมานานเกินไป เมื่อคุณได้พัฒนาแนวความคิดแล้ว คุณจะรู้สึกเหมือนเป็นคนงี่เง่า เราจำเป็นต้องสร้างฟังก์ชันที่มองผ่านอาร์เรย์ของวัตถุ (อาร์กิวเมนต์แรก) และส่งกลับอาร์เรย์ของวัตถุทั้งหมดที่มีคุณสมบัติและคู่ค่าที่ตรงกัน (อาร์กิวเมนต์ที่สอง)

คุณควรจะคุ้นเคยกับวิธีการเลือกองค์ประกอบจากอาร์เรย์

var arr = [[1], [2]]
console.log(arr[0])
//logs [1]
console.log(arr[1])
//logs [2]

และเข้าใจว่าองค์ประกอบสามารถเลือกได้จากอาร์เรย์ย่อยในลักษณะเดียวกัน

var arr = [[1,4,3], [1,2,3]]
console.log(arr[0][1])
//logs 4

กุญแจสำคัญในการเอาชนะความท้าทายนี้คือการทำความเข้าใจสิ่งที่ Object.keys() ทำ ตัวอักษรของวัตถุในอาร์เรย์ collection ได้แทนที่แป้นตัวเลขด้วยคำ ดังนั้นคุณจะไม่สามารถเลือกองค์ประกอบในอาร์เรย์ด้วยแป้นตัวเลขเหมือนที่คุณคุ้นเคยได้อีกต่อไป

function whatIsInAName(collection, source) {
 
 console.log(collection[1][0])
 // logs undefined
 
}
whatIsInAName([{ first: “Romeo”, last: “Montague” }, { first: “Mercutio”, last: null }, { first: “Tybalt”, last: “Capulet” }], { last: “Capulet” });

อย่างไรก็ตาม หากคุณใช้ปุ่มเพื่อเลือกค่า "แรก" ก็จะใช้งานได้:

function whatIsInAName(collection, source) {
 
 console.log(collection[1].first)
 console.log(collection[1][“first”])
 // Both log Mercutio
 
}
whatIsInAName([{ first: “Romeo”, last: “Montague” }, { first: “Mercutio”, last: null }, { first: “Tybalt”, last: “Capulet” }], { last: “Capulet” });

ดังนั้นคุณจะเห็นว่าสิ่งที่เราต้องทำคือนำค่าคีย์จาก source ไปใช้กับ Object.keys(source)

function whatIsInAName(collection, source) {
 
 var key = Object.keys(source);
 console.log(key)
 //logs [‘last’]
}
whatIsInAName([{ first: “Romeo”, last: “Montague” }, { first: “Mercutio”, last: null }, { first: “Tybalt”, last: “Capulet” }], { last: “Capulet” });

จากนั้นเราจำเป็นต้องวนซ้ำผ่าน collection เพื่อตรวจสอบว่าคุณสมบัติใดมีค่าที่ตรงกับค่าของ source หรือไม่ นอกจากนี้เรายังต้องทำทีละครั้ง และสำหรับคีย์ทั้งหมดที่มีอยู่ใน source ดังนั้นเราจึงต้องการเขียนฟังก์ชันที่ใช้ตัวกรองเพื่อพิจารณาว่าสมาชิกของ collection is จะถูกลบออกหรือไม่ หากอาร์เรย์เสร็จสมบูรณ์ เราต้องการคืนค่าจริง ถ้าไม่เป็นเท็จ

function whatIsInAName(collection, source) {
var arr =[];
var result =undefined;
var keys = Object.keys(source);
console.log(keys.length);
function check(item){
 
 for (var i = 0; i < keys.length; i++){
 
 if (item.hasOwnProperty(keys[i]) && item[keys[i]] == source[keys[i]]){
 result = true;
 }
 else result = false;
 }
 return result;
}
arr = collection.filter(check);
return arr;
 
 
 // Only change code above this line
}
whatIsInAName([{ “a”: 1, “b”: 2 }, { “a”: 1 }, { “a”: 1, “b”: 2, “c”: 2 }], { “a”: 1, “b”: 2 });