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