Фильтровать массив в массив - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть материал с определенным идентификационным номером и массив продуктов, которые содержат массив материалов, из которых они состоят. Мне нужно отфильтровать все продукты, которые включают этот конкретный c материал (все продукты, которые имеют этот идентификационный номер в массиве материалов). Есть ли быстрый способ сделать это с помощью синтаксиса ES6?

Например

const myMaterialId = 100

const productsArray = [
  {
    name: products,
    materials: [
      {id: 100, amount: 30},
      {id: 102, amount: 20},
    ],
  },
  {
    name: product2,
    materials: [
      {id: 115, amount: 25},
      {id: 120, amount: 50},
    ],
  },
  {
    name: product2,
    materials: [
      {id: 100, amount: 35},
      {id: 120, amount: 50},
      {id: 150, amount: 10},
    ],
  }
];```


Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

https://jsfiddle.net/8r31zdav/ Вы можете использовать фильтр и найти метод

 var result= productsArray.filter(x=>x.materials.find(y=>y.id==myMaterialId));

, а также ваш объект недействителен. Значение атрибута name является строкой, поэтому вам нужно записать его в ""

const productsArray = [
  {
    name: "products",
    materials: [
      {id: 100, amount: 30},
      {id: 102, amount: 20},
    ],
  },
  {
    name: "product3",
    materials: [
      {id: 115, amount: 25},
      {id: 120, amount: 50},
    ],
  },
  {
    name: "product2",
    materials: [
      {id: 100, amount: 35},
      {id: 120, amount: 50},
      {id: 150, amount: 10},
    ],
  }
];
0 голосов
/ 11 апреля 2020

Вы можете использовать функцию filter :

var filteredProductsArray = productsArray.filter(product => product.materials.filter(material => material.id === myMaterialId).length > 0);

Это отфильтрует все продукты, отфильтровав их материалы, чтобы увидеть, есть ли в массиве материалов материал с вашим идентификатором материала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...