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);
}