javascript - 基于键/值对的 Filer 对象数组
问题描述
我正在创建一个函数,它接受第一个参数,一个对象数组,并将其与第二个参数(一个对象)进行比较,以查看键/值对是否匹配。该函数将返回包含匹配键/值对的对象。我同时使用filter
, 和hasOwnProperty
键进行比较,如下所示:
function whatIsInAName(collection, source) {
var result = collection.filter(el => {
return el == Object.keys(el).hasOwnProperty(Object.keys(source)) === true;
});
}
return result;
whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio",
last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
在上面的示例中,函数将返回{ first: "Tybalt", last: "Capulet" }
我正在过滤第一个参数并将键与第二个参数进行比较,试图返回两个对象的键进行比较,但是我很困惑这应该如何工作。即,如果这是解决方案所需要的,我将如何比较除了键之外的值?我确实知道还有其他方法可以得到答案,但我想掌握hasOwnProperty
我的逻辑哪里出了问题。谢谢你。
解决方案
相反,迭代entries
each el
,collection
这样您就可以一次测试每个键和关联的值。hasOwnProperty
检查完全是多余的:
function whatIsInAName(collection, source) {
const [[findKey, findVal]] = Object.entries(source);
return collection.filter(el => (
Object.entries(el).some(([key, val]) => (
key === findKey && val === findVal
)
)))
}
console.log(
whatIsInAName([{
first: "Romeo",
last: "Montague"
}, {
first: "Mercutio",
last: null
}, {
first: "Tybalt",
last: "Capulet"
}, {
first: "another",
last: "Capulet"
}, {
first: "Tybalt",
last: "notACapulet"
}], {
last: "Capulet"
})
);
推荐阅读
- javascript - 如何修改我的删除帐户功能以适用于 Google 帐户?
- sql - SQL - 我需要一个查询来将客户的订单按订单日分为 1 到 10 的订单大小分组。每张发票上可以有 1 到 10 个订单
- xamarin.forms - 使用 xamarin.build.download 0.10.0 时 xamarin.forms ios 出现错误
- ms-access - Access 365 表单未绑定文本框条目在每条记录中重复输入
- plot - 贝塞尔函数:不完全;需要更多输入 继续回来
- mysql - 无法安装mysql
- python - Pandas - 从前一个日期时间分钟获取特定行的值
- adb - 如果通过 GithubActions 运行 Detox 找不到 adb
- c# - 无法为 Blazor 上的属性提供值
- ios - Apple 金属着色器语言 (MSL) 总是线性颜色?