Tantangan ini membuat saya bingung terlalu lama. Setelah Anda membuat terobosan konseptual, Anda akan merasa seperti orang bodoh. Kita perlu membuat fungsi yang menelusuri array objek (argumen pertama) dan mengembalikan array semua objek yang memiliki pasangan properti dan nilai yang cocok (argumen kedua).

Anda harus memahami cara memilih elemen dari array.

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

dan memahami bahwa elemen dapat dipilih dari sub-array dengan cara yang sama.

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

Kunciuntuk memecahkan tantangan ini adalah memahami apa yang Object.keys() lakukan. Objek literal dalam array collectiontelah menggantikan kunci angka dengan kata-kata sehingga Anda tidak dapat lagi memilih elemen dalam array dengan kunci angka seperti yang biasa Anda lakukan.

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” });

Namun, jika Anda menggunakan kunci untuk memilih nilai "pertama", ini akan berfungsi:

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” });

Jadi, Anda akan melihat bahwa yang perlu kita lakukan adalah mengambil nilai kunci dari source dengan 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” });

Kita kemudian perlu mengulangi collection untuk memeriksa apakah ada properti yang berisi nilai yang cocok dengan nilai source. Kita juga perlu melakukan ini satu per satu, dan untuk semua kunci yang ada disource jadi kita ingin menulis fungsi yang menggunakan filter untuk menentukan apakah anggota collection akan dihapus atau tidak. Jika array selesai kami ingin mengembalikan nilai true. Jika tidak salah.

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 });