javascript - 与参数匹配时返回对象的键和值

标签 javascript arrays object matching

目标是构建一个函数,该函数将对象数组作为第一个参数。作为第二个参数,它需要一个键和值对。

function whatIsInAName(collection, source)

现在该函数应该返回一个数组,其中包含对象中所有匹配的键和值。例如:

whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" })´ 

应该返回

[{ first: "Tybalt", last: "Capulet" }]

还有

whatIsInAName([{ "apple": 1, "bat": 2 }, { "bat": 2 }, { "apple": 1, "bat": 2, "cookie": 2 }], { "apple": 1, "bat": 2 })

应该返回

 [{ "apple": 1, "bat": 2 }, { "apple": 1, "bat": 2, "cookie": 2 }]

我尝试循环遍历集合并通过源数组搜索匹配项。像这样:

function whatIsInAName(collection, source) {
  // What's in a name?
  var arr = [];
  for (var i = 0; i < Object.keys(collection).length; i++) {
    for (var j = 0; j < Object.keys(source).length; j++) {
      if (collection[i].last === source.last) {
        arr.push(collection[i]);
      }
    }
  }
  console.log(arr);
}

在这种情况下 whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" })

这并不奇怪。

我不明白的是,为什么我不能概括上述解决方案,以便它也适用于其他情况。

为什么不能简单地给出条件:

if (collection[i] === source)

(请注意集合和源后面缺少的“Last" 键。)

当我 console.log(source) ,控制台记录它。所以恕我直言,上面的条件语句应该有效,并且应该将匹配项插入 arr大批。

如何构建一个函数,该函数返回一个数组,其中包含对象中所有匹配的键和值。

 function whatIsInAName(collection, source)

为什么(collection[i] === source )不工作?

谢谢。

最佳答案

您需要迭代键/值对并返回过滤后的结果。

实际上没有内置方法可以将一个对象与另一个对象进行测试来检查该对象是否包含子对象。

function whatIsInAName(collection, source) {
    var pairs = Object.entries(source);
    return collection.filter(object => pairs.every(([key, value]) => object[key] === value));
}

console.log(whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" }));
console.log(whatIsInAName([{ "apple": 1, "bat": 2 }, { "bat": 2 }, { "apple": 1, "bat": 2, "cookie": 2 }], { "apple": 1, "bat": 2 }));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 与参数匹配时返回对象的键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558758/

相关文章:

javascript - 如何使用添加按钮将任务列表插入数组?

javascript - 如何防止 Google map SVG 标记相互破坏

javascript - 通过 javascript 应用宽度时如何使 css 转换发生

sql - 如何搜索包含在我的搜索键中找到的字符串的数组?

java ArrayList包含不同的对象

c# - 为什么有必要对 'manually' 求值或强制转换对象的类型?

javascript - 为多个操作创建 ASCX 控件

arrays - 需要在 CloudKit 查询后立即触发完成 block

javascript - 如何将两个数组与对象合并为一个?

javascript - 将对象键值附加到 <li>