2017-09-24 100 views
1

目標是查看第一個參數是否具有與第二個參數相同的鍵/值對。這是我想出來的,但它不起作用。我一直堅持這個很長一段時間。如果您在邏輯上指出錯誤而不給我解決方案,將會有所幫助。循環遍歷對象數組並返回具有相同/鍵值對的對象作爲另一個對象

function whatIsInAName(collection, source) { 
    for(i = 0; i < collection.length; i++) { 
    if(Object.keys(collection[i]) && Object.values(collection[i]) === Object.keys(source) && Object.values(source)) { 
    return collection[i]; 
    } 
    } 
} 
​ 
+1

你是什麼意思 「它不工作」 嗎?究竟發生了什麼,它與預期的結果有什麼不同? – stybl

+0

源只有一個鍵嗎? –

回答

0

只有一個源鍵,你可以得到它,並檢查與source給定值的實際項目和值執行查找。然後返回第一個找到的對象。

function whatIsInAName(collection, source) { 
 
    var key = Object.keys(source)[0]; 
 
    return collection.find(o => o[key] === source[key]); 
 
} 
 

 
console.log(whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Montague" }));

擁有超過一個鍵,就可以檢查所有鍵雷同。

function whatIsInAName(collection, source) { 
 
    var keys = Object.keys(source); 
 
    return collection.find(o => keys.every(k => o[k] === source[k])); 
 
} 
 

 
console.log(whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { first: "Romeo", last: "Montague" }));