我能够基于是否包含等于==='Featured'的标记成功返回数组。这是代码:
getFeatured() {
return blogPosts.filter((item) => (
item.tags.some((value) => value === 'Featured')
))
}
这会过滤每个博客帖子,然后在帖子中的标记数组上使用.some()。
我现在需要创建一个函数,该函数返回不包含“功能”一词的帖子数组。
这是到目前为止的功能:
renderRegular() {
const regularPost = blogPosts.filter((item) => (
item.tags.find((value) => value !== 'Featured' )
))
console.log(regularPost)
}
答案 0 :(得分:2)
您需要使用Array.prototype.every()
代替Array.prototype.find()
,如果所有元素都满足谓词,则返回true
。在这种情况下,如果所有标签(每个标签)都不等于'Featured'
,或者换句话说,如果所有标签都不等于'Featured'
(另请参见@Barmar的答案):
const posts = [{
title: 'Post 1',
tags: ['Featured'],
}, {
title: 'Post 2',
tags: ['Foo', 'Featured'],
}, {
title: 'Post 3',
tags: ['Bar'],
}];
const regularPost = posts.filter(item =>
item.tags.every(value => value !== 'Featured'));
console.log(regularPost);
这样做的好处是,您还可以轻松检查除相等或不相等以外的条件:
const posts = [{
title: 'Post 1',
tags: ['Featured'],
}, {
title: 'Post 2',
tags: ['Foo', 'FEATURED POSTS'],
}, {
title: 'Post 3',
tags: ['Bar'],
}];
const regularPost = posts.filter(item =>
item.tags.every(value => !value.match(/featured/gi)));
console.log(regularPost);
但是,如果您只进行相等比较,则Array.prototype.indexOf()
或Array.prototype.includes()
可能是更好的选择:
const posts = [{
title: 'Post 1',
tags: ['Featured'],
}, {
title: 'Post 2',
tags: ['Foo', 'Featured'],
}, {
title: 'Post 3',
tags: ['Bar'],
}];
// const regularPost = posts.filter(item =>
// item.tags.indexOf('Featured') === -1);
const regularPost = posts.filter(item =>
!item.tags.includes('Featured'));
console.log(regularPost);
答案 1 :(得分:2)
简单地否定测试不是这样做的方法。如果标记为Tag1, Featured, Tag2
,则测试将成功,因为"Tag1" != "Featured"
。
相反,您需要否定some()
的结果,而不是对其内部的测试。
renderRegular() {
return blogPosts.filter((item) => (
!item.tags.some((value) => value === 'Featured')
))
}
或者您可以申请de Morgan's Laws。 “ some X == Y”的反义词是“每个X!= Y”:
renderRegular() {
return blogPosts.filter((item) => (
item.tags.every((value) => value !== 'Featured')
))
}
答案 2 :(得分:0)
find
将返回与您的条件匹配的第一个元素,因为它将返回一个元素,即一个始终为true的字符串。使用indexOf
搜索字符串是否存在。
renderRegular() {
const regularPost = blogPosts.filter((item) => (
item.tags.indexOf('Featured') === -1
))
console.log(regularPost)
}
答案 3 :(得分:0)
您可以分配项目:
renderRegular() {
const regularPost = blogPosts.filter((item) =>
// assign item so the filter will return item matched condition with the find
item = item.tags.find((value) => value !== 'Featured'
))
}