[英]Filter Javascript array of objects with another array of objects
我有清单
var list = [
{name: 'Hello', ads: true, pas: ['Av', 'Sd', 'Qr']},
{name: 'Fre', ads: false, pas: ['Sd', 'Bc']},
{name: 'Nat', ads: false, pas: ['Bc', 'Mo', 'Rr']},
{name: 'Bor', ads: true, pas: ['Bo', 'Be', 'De']},
{name: 'Arg', ads: true, pas: ['Ar', 'Na', 'Br']},
];
和数组过滤器
var filter = [
'Sd','Be'
];
我试过filter
但它没有过滤。
list
.filter(function(ls) {
return ls.pas
.filter(function(p){
return filter.indexOf(p) > -1;
})
})
我的预期产量
[
{name: 'Hello', ads: true, pas: ['Av', 'Sd', 'Qr']},
{name: 'Fre', ads: false, pas: ['Sd', 'Bc']},
{name: 'Bor', ads: true, pas: ['Bo', 'Be', 'De']}
];
您可以使用some()
来检查当前对象的pas
数组中的任何元素是否在filter
数组中。
var list = [ {name: 'Hello', ads: true, pas: ['Av', 'Sd', 'Qr']}, {name: 'Fre', ads: false, pas: ['Sd', 'Bc']}, {name: 'Nat', ads: false, pas: ['Bc', 'Mo', 'Rr']}, {name: 'Bor', ads: true, pas: ['Bo', 'Be', 'De']}, {name: 'Arg', ads: true, pas: ['Ar', 'Na', 'Br']}, ]; var filter = [ 'Sd','Be' ]; var result = list.filter(function(e) { return e.pas.some(function(a) { return filter.indexOf(a) != -1 }) }) console.log(result);
使用es6看起来很不错:
const list = [
{name: 'Hello', ads: true, pas: ['Av', 'Sd', 'Qr']},
{name: 'Fre', ads: false, pas: ['Sd', 'Bc']},
{name: 'Nat', ads: false, pas: ['Bc', 'Mo', 'Rr']},
{name: 'Bor', ads: true, pas: ['Bo', 'Be', 'De']},
{name: 'Arg', ads: true, pas: ['Ar', 'Na', 'Br']},
],
filter = ['Sd','Be']
list.filter(a=>a.pas.some(a=>filter.includes(a))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.