javascript - 使用数组作为键来遍历 JavaScript 中的对象
问题描述
我正在学习 JavaScript,并且花了很多时间练习遍历数组和对象数组。我想学习如何使用数组作为对象数组的过滤器。我找不到任何解释如何做到这一点的文章,所以我自己尝试使用嵌套循环。但是,我无法让它工作。
变量 catKey[]; 是包含我想用来过滤 var posts[] 的数据的数组;,识别哪些对象在 Property cat: [] 中匹配并返回标题属性。我知道我可以使用 array.Filter 但我希望能够做到这一点,前提是我并不总是知道 catKey 数组中的项目数。用例是针对我使用事件处理程序的情况,当我添加的链接被单击 WordPress 中的帖子并返回类别 ID 时,我将搜索帖子列表以查找具有相同类别的其他帖子标识。谁能告诉我哪里出错了。
var catKey = [2, 6];
var posts = [
{
id: 1,
cat: [1, 2, 3],
title: "Hello World"
},
{
id: 2,
cat: [5, 6, 7],
title: "Hello JavaScript"
},
{
id: 3,
cat: [8, 9],
title: "Hello Arrays!"
}
];
for (var i = 0; i < catKey.length; i++) {
for (var j = 0; j < posts.length[i]; j++) {
if (catKey[i] === posts[j].cat) {
document.write(posts[j].title);
}
}
}
解决方案
var catKey = [2, 6];
var posts = [
{
id: 1,
cat: [1, 2, 3],
title: "Hello World"
},
{
id: 2,
cat: [5, 6, 7],
title: "Hello JavaScript"
},
{
id: 3,
cat: [8, 9],
title: "Hello Arrays!"
}
];
var result = posts.filter(({cat})=>{
return catKey.filter((key)=>{
return cat.includes(key)
}).length > 0
})
console.log(result);
精简版
posts.filter(({ cat }) => catKey.filter(key => cat.includes(key)).length > 0);
推荐阅读
- svelte - 如何像 Vue 一样在 Svelte 中制作无标签插槽模板
- vue.js - 如何向 v-data-table 添加点击事件?
- c# - 旋转 UILabel 的拉伸宽度
- python - 根据 MultiIndex DataFrame 中的第一级列删除重复项
- buildkite - 如何在 buildkite 中为存储库/管道级别添加访问控制?
- java - 错误:SqlExceptionHelper:HOUR_OF_DAY:2 -> 3
- ios - Xcode 11 GM Seed 2 在构建工作区/项目时冻结
- ios - 如何激活包月试订阅(自动续费)?
- php - Laravel Gazzel 向同一个 URL 发出多个请求而无需多次登录
- javascript - 无法将主机设置为节点 net.socket 连接