javascript - 如何告诉 Javascript 过滤对象数组
问题描述
我试图弄清楚如何告诉 javascript 过滤对象数组,这是代码
我希望我在代码中解释了所有内容 //* 是问题所在。
function whatIsInAName(collection, source) { // first arg is the array of objects, second arg is the object i want to get matched
let arr = [];
let newArr = Object.getOwnPropertyNames(source); // this converts the object into an array
for (let i = 0; i < collection.length; i++) { // loop through objects
for (let s = 0; s < newArr.length; s++) { // loop through array
if (collection[i].hasOwnProperty(newArr[s]) === true) { //* it returns an object if it matches 1 element of array
console.log(collection[i]) // i want it to return only if all elements on the array matches
arr.push(collection[i]);
}
}
}
return arr;
}
whatIsInAName([{
"apple": 1,
"cookie": 6
}, {
"apple": 1,
"bat": 2
}, {
"cookie": 2
}, {
"apple": 1,
"cookie": 4
}, {
"apple": 1,
"bat": 2,
"cookie": 2
}], {
'apple': 1,
"cookie": 2
})
解决方案
尝试这样的事情:
let collection = [{ "apple": 1, "cookie": 6}, {"apple": 1, "bat": 2 }, { "cookie": 2 }, { "apple": 1, "cookie": 4 }, { "apple": 1, "bat": 2, "cookie": 2 }];
let source = { 'apple': 1, "cookie": 2 };
let filtered = collection.filter(e=>(
Object.getOwnPropertyNames(e).every(ee=>source.hasOwnProperty(ee))&&
Object.getOwnPropertyNames(source).every(ee=>e.hasOwnProperty(ee))));
console.log(filtered);
推荐阅读
- portable-executable - AddressOfEntryPoint 中的 PE 文件格式有误?
- c - 如何将数组放入 int 但使用 scanf
- android - 用于创建 apk 的 android gradle/gradlew 命令行构建
- javascript - 创建一个反应项目
- tomcat - 当我尝试在 URL 中发送特殊字符时,Tomcat 正在返回 HTTP 状态 400 - 错误请求状态
- java - Eclipse Oxygen 中的 Spring Boot 项目
- excel - 在源工作表中没有唯一 ID 的 Ms Excel 中的索引和匹配
- sql - 为 INSERT、DELETE 触发事件创建触发器 TR1,如果事务在 SUNDAY 执行,则应触发触发器
- jquery - 如何在jQuery中计算自动成绩和备注
- python - 如何使用 Python REST API 从 VSTS (Azure DevOps) 中的查询中提取 WorkItems?