JSFiddle - React, Tailwind, and code Playground

JavaScript

function foo1(x)
{
    console.log("foo1 "+JSON.stringify(x));
}

function foo2(x)
{
    console.log("foo2 "+JSON.stringify(x));
}

//foo([1,2,3]);

var map = {};
map[1] = [];
map[2] = [];
map[3] = [];

//1,2 -> foo1
map[1].push(foo1);
map[2].push(foo1);

//2,3 ->foo2
map[2].push(foo2);
map[3].push(foo2);

console.log(JSON.stringify(map)); 

var allArgsPossible = [1,2,3]

// contains the list of callbacks to be called
var callbackArray = [];  

//maps the callback index in callbackArray to its arguments
//callbackMap[index] = args means callbackArray[index] will be called with parameter "args" 
var callbackMap = {};

for( i in allArgsPossible)
{
    var item = allArgsPossible[i] ;
    var callbacks =  map[ item ];
    for(j in callbacks)
    {
        var callback = callbacks[j];
        
        if(callback.index == undefined)
        {
            var index = callbackArray.length;
            // adding a new property "index" to the callback
            callback.index = index;
            callbackMap[index] = [item];
            //create a new entry in callbackArray
            callbackArray.push(callback);
        }
        else
        {
            callbackMap[callback.index].push(item);
        }
    }
}
    
console.log(JSON.stringify(callbackMap));

for( i in callbackArray)
{
    var callback = callbackArray[i];
    //get arguments from our reverse map
    var args = callbackMap[callback.index];
    // Bingo ! 
    callback(args);
}