使用另一个数组筛选javascript对象

使用另一个数组筛选javascript对象,javascript,arrays,filter,Javascript,Arrays,Filter,我有这样的Javascript对象数组 var posts = [ {area: 'NY', name: 'Bla', ads: true}, {area: 'DF', name: 'SFS', ads: false}, {area: 'TT', name: 'SDSD', ads: true}, {area: 'SD', name: 'Engine', ads: false}, {area: 'NSK', name: 'Toyota', ads: false}, ]; var fi

我有这样的Javascript对象数组

var posts = [
 {area: 'NY', name: 'Bla', ads: true},
 {area: 'DF', name: 'SFS', ads: false},
 {area: 'TT', name: 'SDSD', ads: true},
 {area: 'SD', name: 'Engine', ads: false},
 {area: 'NSK', name: 'Toyota', ads: false},
];
var filter = ['NY', 'SD'];
还有另一个类似这样的过滤器集合

var posts = [
 {area: 'NY', name: 'Bla', ads: true},
 {area: 'DF', name: 'SFS', ads: false},
 {area: 'TT', name: 'SDSD', ads: true},
 {area: 'SD', name: 'Engine', ads: false},
 {area: 'NSK', name: 'Toyota', ads: false},
];
var filter = ['NY', 'SD'];
我正在尝试使用此筛选器筛选我的
帖子
数组

function filtered() {
  return posts
     .filter(function(post){
        return post.ads === true;
     })
     .filter(function(post){
        return filter.indexOf(post.area) > 0;
     })
}

console.log(filtered());
这个过滤器什么也不提供,只是空数组

只需要一种方法,第二个条件应该是
indexOf(post.area)>-1因为索引从
0
开始

var posts=[
{地区:'NY',名称:'Bla',广告:true},
{区域:'DF',名称:'SFS',广告:false},
{区域:'TT',名称:'SDSD',广告:true},
{区域:'SD',名称:'Engine',广告:false},
{地区:'NSK',名称:'Toyota',广告:false},
];
变量过滤器=['NY','SD'];
过滤函数(p,f){
返回p
.过滤器(功能(v){
返回v.ads和&f.indexOf(v.area)>-1;
})
}

console.log(过滤(posts,filter))您可以使用一个更通用的解决方案,该解决方案带有过滤约束

函数过滤器(数组、约束){
返回数组.filter(函数(a){
返回对象。键(约束)。每个(函数(k){
返回约束类型[k]==='function'?约束[k](a[k]):a[k]==约束[k];
});
});
}
var posts=[{area:'NY',name:'Bla',ads:true},{rea:'DF',name:'SFS',ads:false},{area:'TT',name:'SDSD',ads:true},{rea:'SD',name:'Engine',ads:false},{area:'NSK',ame:'Toyota',ads false}],
结果=过滤器(柱{
广告:没错,
区域:函数(v){return['NY','SD'].indexOf(v)!==-1;}
});

控制台日志(结果)这是
Array.prototype.filter()和
Array.prototype.some()组合的典型用例

var posts=[
{地区:'NY',名称:'Bla',广告:true},
{区域:'DF',名称:'SFS',广告:false},
{区域:'TT',名称:'SDSD',广告:true},
{区域:'SD',名称:'Engine',广告:false},
{地区:'NSK',名称:'Toyota',广告:false},
],
过滤器=['NY','SD'];
结果=posts.filter(o=>filter.some(f=>o.ads&&f==o.area));
控制台日志(结果);
//或使用过滤器和包含组合
结果=posts.filter(o=>o.ads&&filter.includes(o.area));
控制台日志(结果)