const data = [
{
id: 1,
title: "stuffed chicken is tasty as anything",
picture: "./img/chicken.jpg",
tags: ["oooo", "tasty", "stuffed"]
},
{
id: 2,
title: "noodles with shrimp and salad",
picture: "./img.ramen.jpg",
tags: ["noodles", "shrimp", "salad"]
},
{
id: 3,
title: "oooooooooooooooooooooooo",
picture: "oooooooooooooooooooo",
tags: ["oooo", "xxxx", "qqqq"]
}
];
所以我需要从数组中找到匹配的title:和tags:。在下面,我显示了如何进行标题制作。
let matches = data.filter(el => {
return el.title.match(regex);
}
但是我该如何在标签上这样做呢?我可以做:
return el.tags[0].match(regex) || el.tags[1].match(regex);
但是如果还有更多标签怎么办?我试图遍历它并匹配正则表达式,但是我得到了空对象。
return el.tags.forEach(it => it.match(regex));
答案 0 :(得分:0)
您可以在JavaScript中使用数组的every
函数。仅当所有数组元素都满足条件时,它才会返回true。
return el.tags.every(it => it.match(regex));
答案 1 :(得分:0)
我认为您只是在使用正则表达式进行搜索,在这种情况下,您可以仅使用Array.prototype.some()
或Array.prototype.every()
搜索标签。
赞:
let matches = data.filter(e => e.title.match(regex) && e.tags.some(t => t.match(regex));
// --
let matches = data.filter(e => e.title.match(regex) && e.tags.every(t => t.match(regex));
鉴于它们是标签而不是完整标题,我建议使用some
函数。从语义上讲,我认为这更有意义。选择了1/4个标签后,您就不想隐藏它们。
答案 2 :(得分:0)
使用双管道||
发布后,应该使用函数Array.prototype.some
来计算谓词(即处理程序),如果至少一个元素满足条件,则返回true。
此外,您应该改为使用函数test
。
const data = [{ id: 1, title: "stuffed chicken is tasty as anything", picture: "./img/chicken.jpg", tags: ["oooo", "tasty", "stuffed"] }, { id: 2, title: "noodles with shrimp and salad", picture: "./img.ramen.jpg", tags: ["noodles", "shrimp", "salad"] }, { id: 3, title: "oooooooooooooooooooooooo", picture: "oooooooooooooooooooo", tags: ["oooo", "xxxx", "qqqq"] }];
let regex = new RegExp("[oo]");
let matches = data.filter(({title, tags}) => regex.test(title) || tags.some(t => regex.test(t)));
console.log(matches);
.as-console-wrapper { max-height: 100% !important; top: 0; }