javascript - 如何按对象数组中的数组属性进行过滤

标签 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;

现在我必须像这样按发票的属性进行过滤。

var filtered = invoices.filter(function(invoice){
   return invoice.number == "123";
});

但现在我想获取与编号和产品名称匹配的发票

我该怎么做

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

最佳答案

使用Array.some检查是否存在具有所需名称的产品:

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

与使用Array.filter并检查结果数组的长度不同,这完全避免了创建临时数组和短路;一旦发现命中,它就会立即返回 true。

关于javascript - 如何按对象数组中的数组属性进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37011669/

相关文章:

javascript - 在嵌套对象中设置值

Java:读取带有分隔符的文件时出错

C# 将字符串转换为数组

ruby-on-rails - 如何在 Ruby 中创建对象的深拷贝?

javascript - (如何)我可以使用 Chrome 检查器在使用缓存清除器的文件上设置断点吗?

javascript - chrome javascript事件处理问题

javascript - const vs var 和 window.name 属性

java - 在 Scala(或 Java)中传递二维数组的一列

javascript - ko.js : Add data to existing vm

json - 如何使用 jq 从 JSON 字符串中获取键值对