我正在学习JavaScript,并花了很多时间练习遍历对象数组和数组。我想学习如何将数组用作对象数组的过滤器。我找不到任何说明如何执行此操作的文章,所以我自己使用了嵌套循环。但是,我无法使其正常工作。
Var catKey [];是包含要用于通过var posts []过滤的数据的数组; ,在[Property]猫[[]]中识别哪些对象具有匹配项,然后返回title属性。我知道我可以使用array.Filter,但我希望能够在不总是知道catKey数组中的项目数的前提下执行此操作。该用例适用于以下情况:我使用事件处理程序,当我添加的链接在WordPress中的帖子上单击并返回类别ID时,我将在帖子列表中进行搜索,以查找具有相同类别的其他帖子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);
}
}
}
答案 0 :(得分:0)
根据您的问题,我假设catKey
包含嵌套的cat
数组应匹配的数字白名单,即只要在cat
数组中找到任何值, {1}},您想保留它们。
在这种情况下,您可以简单地使用catKeys
遍历所有帖子,并评估各个帖子的.filter()
数组与白名单之间是否存在任何交集:
cat
如果您想尝试用ES6编写代码,那也不是问题:而且更加简洁!
var filteredPosts = posts.filter(function(post) {
return post.cat.filter(function(c) { return catKey.indexOf(c) !== -1; }).length;
});
请参见下面的概念验证:
const filteredPosts = posts.filter(post => post.cat.filter(c => catKey.includes(c)).length);
答案 1 :(得分:0)
您可以同时使用map
和find
来检查数组中的值和对象数组中的值。使用map
对catKey
数组进行迭代,对于every element
find
用于使用post
在名为.includes()
的数组内的对象内部的对象中查找数组中的该元素。 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!"
}];
console.log(catKey.map((e) => posts.find((x) => x.cat.includes(e))))
方法。
$base = "https://".$_SERVER['HTTP_HOST']; // (For https)
答案 2 :(得分:0)
要找到第一个符合您条件的条目,可以使用Array.prototype.find()
函数:
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!" }
];
const resObj = posts
.find(p => p.cat.some(c => catKey.includes(c)))
.title;
console.log(resObj)
或者要查找所有,请使用Array.prototype.filter()
:
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!" }
];
const resObjs = posts
.filter(p => p.cat.some(c => catKey.includes(c)))
.map(o => o.title);
resObjs.forEach((t) => console.log(t));
答案 3 :(得分:0)
ret
call