Arrays intersection of IDs

by igalst

JavaScript

var options = [{
    name: 'a',
    optionsIds: [20, 26, 34]
}, {
    name: 'b',
    optionsIds: [20, 24, 34]
}, {
    name: 'b2',
    optionsIds: [24, 20, 11]
}, {
    name: 'c',
    optionsIds: [21, 24, 30]
}, {
    name: 'd',
    optionsIds: [21, 22, 23]
}];

var selectedIds = [20, 24];

var findItersection = function (options, selectedIds) {
    var goodOptions = [];
    
    selectedIds.forEach(function (selectedId) {
        var optionsForLoop = goodOptions.length ? goodOptions : options;
        goodOptions = [];

        optionsForLoop.forEach(function (option, optionIndex) {
            if (option.optionsIds.indexOf(selectedId) < 0) {
                return;
            }
            goodOptions.push(option);
        });
    });
    
    return goodOptions;
};

var itersection = findItersection(options, selectedIds);
console.log(itersection); // expecting: [{ name:'b', optionsIds: [20, 24, 34] }, { name:'b2', optionsIds: [24, 20, 11] }]