In the example below I have an array of objects which I group by 2 of their properties (based on https://stackoverflow.com/a/40142591).
var arr = [{
I believe the below kind of grouping should solve the problem:
var arr=[{id:1,tags:"main",yearCode:"2018"},{id:2,tags:["main","blue"],yearCode:"2018"},{id:3,tags:["main","green"],yearCode:"2018"},{id:25,tags:["green"],yearCode:"2018"},{id:26,tags:["important"],yearCode:"2017"},{id:29,tags:["important","blue"],yearCode:"2017"},{id:2,tags:["important","green"],yearCode:"2017"}];
var mainFilter = "yearCode";
var secFilter = "tags";
var result = arr.reduce((map, obj) => {
if (!map[obj[mainFilter]]) map[obj[mainFilter]] = {};
[].concat(obj[secFilter]).forEach(subEl => {
if (!map[obj[mainFilter]][subEl]) map[obj[mainFilter]][subEl] = [];
map[obj[mainFilter]][subEl].push(obj);
});
return map;
}, {});
console.log(result);