javascript - 与参数匹配时返回对象的键和值
问题描述
目的是构建一个函数,它将一个对象数组作为第一个参数。作为第二个参数,它需要一个键值对。
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 - 传递 data-id 在 JS 函数中不起作用
- javascript - 事件侦听器不适用于某些 HTML 元素
- javascript - 如何使用 Javascript 从多个 div 元素中识别视口中的哪个 div 元素(或显示在屏幕上)?
- ruby - 数组.map!从 0 以外的索引开始
- ansible - jinja2 selectattr() 中键的正则表达式匹配
- php - 抽象类中的 Db 连接错误 - 有人帮我找到错误吗?
- pine-script - 为什么这个总和不适用于纽约证券交易所 1 个月的高/低数据?
- python - 将具有相同列值的 DataFrame 行加在一起,但保留顺序
- python - 负维度和模块keras.backend没有属性常见错误
- python - scipy中密集线性方程组的稀疏解