循环遍历对象数组并返回具有相同/键值对的对象作为另一个对象

时间:2017-09-24 18:46:22

标签: javascript

目标是查看第一个参数是否具有与第二个参数相同的键/值对。这是我想出来的,但它不起作用。我已经坚持了很长时间。如果你在没有给我解决方案的情况下指出逻辑错误会有所帮助。

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 个答案:

答案 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" }));