2017-09-24 398 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" }));