在JavaScript中存储ID为键的函数?

在JavaScript中存储ID为键的函数?,javascript,sockets,Javascript,Sockets,我有很多数据包通过web套接字进入我的javascript,每个数据包都有一个数据包id,我想创建某种数组或对象,为每个数据包id分配一个要调用的函数,该函数将处理该数据包 我还希望将'packetData'参数包含到所有被调用的函数中,以便它可以获取函数中的其他部分数据,以便适当地处理数据包 这是我到目前为止所拥有的 我在WebSocket上收听消息 socket.onmessage = function (e) { onPacket(JSON.parse(e.data)); };

我有很多数据包通过web套接字进入我的javascript,每个数据包都有一个数据包id,我想创建某种数组或对象,为每个数据包id分配一个要调用的函数,该函数将处理该数据包

我还希望将'packetData'参数包含到所有被调用的函数中,以便它可以获取函数中的其他部分数据,以便适当地处理数据包

这是我到目前为止所拥有的

我在WebSocket上收听消息

socket.onmessage = function (e) {
    onPacket(JSON.parse(e.data));
};
然后我将其传递给这个函数,以JSON格式发送数据,将其解析为键值对象,然后将其传递给这个函数

function onPacket(packetData) {
    const packetId = packetData['packet_id'];
    // TODO: Call the function...
}
我遇到的问题是如何创建数组或keyvalue对象来调用函数?我将所有函数存储在一个名为“packet_events.js”的单独文件中

我自己也尝试过(对象键值),但有人告诉我它不是有效的JS,我被卡住了,需要一些帮助,有人能帮我吗

我的尝试:

var incomingHeaders = {
    1: packetOne(),
};
如果我还没有说清楚,我想要这样的东西,但是有一个数组可以让我不停地写If语句

function onPacket(packetData) {
    const packetId = packetData['packet_id'];

    if (packetId == 1) {
        packetOne(packetData);
    }

    if (packetId == 2) {
        packetTwo(packetData);
    }

    if (packetId == 3) {
        packetThree(packetData);
    }
}

使用对象而不是数组,并创建ID到函数的映射,例如

var idToFunction = {
   0:  packetOne,
   1:  packetTwo,
   2:  packetThree
}
然后在
onPacket
中,根据id检索函数并执行它

function onPacket(packetData) {
    const packetId = packetData['packet_id'];
    var processPacket = idToFunction[packetId];

    if (processPacket) {
        processPacket(packetData);
    }
    else {            
        throw new Error("Invalid packed id: "+packetId);
    }
}

步骤1:创建一个函数对象,该对象保存从packedId到函数的映射

步骤2:迭代数据包数组以调用相应的函数

按照代码段进行操作:

函数packetOne(){
console.log('one'))
}
函数包二(){
console.log('two')
}
让functionObject={
1:packetOne,
2:包二,,
}
让数据包=[
{packetId:1},
{packetId:2}
]
packets.forEach(函数(数据包){
functionObject[packet.packetId]()
})