如何过滤对象数组中的数组属性

Max*_*mus 2 javascript arrays object filter

我有一个像这样初始化的集合:

var invoices = new Array();
var invoice = new Invoice();
invoice.number = "123";
invoice.date = "2016-05-03";
invoice.amount = "100";
var products = new Products();

var product = new Product();
product.code = "A";
product.name = "bar";
products.push(product);   

var product2 = new Product();
product2.code = "B";
product2.name = "foo";
products.push(product2);

invoice.products = products;
Run Code Online (Sandbox Code Playgroud)

现在我要按照这样的发票属性进行过滤.

var filtered = invoices.filter(function(invoice){
   return invoice.number == "123";
});
Run Code Online (Sandbox Code Playgroud)

但现在我想得到与号码和产品名称相匹配的发票

我怎样才能做到这一点

var filtered = invoices.filter(function(invoice){
   return invoice.number == "123" 
   // && invoice.products "name" == "foo";  //<-- At this level how can I filter?
});
Run Code Online (Sandbox Code Playgroud)

Sha*_*ger 6

使用Array.some检查与所需名称的产品的存在:

var filtered = invoices.filter(function(invoice){
   return invoice.number == "123" && invoice.products.some(function(prod) {
       return prod.name === 'foo';
   });
});
Run Code Online (Sandbox Code Playgroud)

与使用Array.filter和检查length生成的数组不同,这可以避免创建临时数组和短路; 一旦找到命中,它立即返回true.