У меня есть Array
из Objects
.
Каждый массив объектов содержит массив items
, и каждый элемент в этом массиве является объектом, содержащим массив category
:
var obj = [
// first object
{
label: 'Label 1',
// first items
items: [
{
id: 1,
itemName: 'Item Name 1',
img: 'imgs/path-to1.jpeg',
sizes: [],
colors: [],
// first category
category: [
'I',
'E',
'M'
],
defaultChoices: {}
},
{
id: 2,
itemName: 'Item Name 2',
img: 'imgs/path-to2.jpeg',
sizes: [],
colors: [],
// second category
category: [
'I',
'E'
],
defaultChoices: {}
},
{
id: 3,
itemName: 'Item Name 3',
img: 'imgs/path-to3.jpeg',
sizes: [],
colors: [],
// third category
category: [
'I'
],
defaultChoices: {}
},
]
},
// second object
{
label: 'Label 2',
// second items
items: [
{
id: 7,
itemName: 'Item Name 7',
img: 'imgs/path-to7.jpeg',
sizes: [],
colors: [],
// fourth category
category: [
'I',
'M'
],
defaultChoices: {}
},
...
, просто чтобы прояснить ситуацию, типичный прямой доступ к category
будет выполняться следующим образом: obj[0].items[0].category
.
С внешнего интерфейса приложения пользователь, основываясь на своем выборе, можете отправить в приложение один из следующих массивов:
['I']
; ['E']
; ['M']
; ['I','E']
; ['I','M']
; ['E','M']
; ['I','E','M']
; - ...;
Тогда приложение должно вернуть отфильтрованный массив obj : если, например, пользователь отправил ['I']
, массив должен содержать любые объекты, в которых категория содержит 'I'.Если пользователь отправил ['E','M']
, массив должен содержать любой объект, в котором категория содержит ['E','M']
(независимо от того, является ли категория ['E','M','I']
) и т. Д.
Я написал много документов о JSfilter
функция, но я не смог разработать одну функцию, которая, учитывая пользовательский массив, может возвращать новый массив в результате фильтрации obj
.Я нашел дюжину документов с нереальными примерами, подобными этому:
var hs = [
{name: 'Batman', franchise: 'DC'},
{name: 'Ironman', franchise: 'Marvel'}
];
var marvels = heroes.filter(function(h) {
return hs.franchise == 'Marvel';
});
Any help is appreciated.
[ОБНОВЛЕНИЕ] Я добавляю более реалистичный образец данных, извините, что не предоставил его раньше: https://drive.google.com/open?id=1sdRx6sQ-cnRXJ8YCe4QH2Sy5fa5mopYW