如何通过if条件为对象添加键?WebSocket场景实现问询
解决WebSocket消息处理中动态更新对象的问题
我来帮你搞定这个需求!首先要注意一个关键点:WebSocket接收到的消息通常是JSON字符串,所以第一步得先把它解析成JavaScript对象才能访问里面的字段。下面是完整的实现代码,完全符合你的要求:
let ChanIds = {}; w.on('message',(msg) => { // 将JSON字符串解析为JS对象(如果你的WebSocket已经自动解析,这步可以省略) const parsedMessage = JSON.parse(msg); console.log(parsedMessage); if (parsedMessage.event) { // 在控制台输出chanId和交易对名称pair console.log(`chanId: ${parsedMessage.chanId}, pair: ${parsedMessage.pair}`); // 给ChanIds对象添加动态键值对:键为chanId,值为symbol ChanIds[parsedMessage.chanId] = parsedMessage.symbol; } });
关键细节解释:
- JSON解析:如果你的WebSocket框架没有自动把消息解析为对象,一定要加
JSON.parse(msg),不然直接访问msg.event会得到undefined。 - 动态对象键赋值:这里必须用方括号语法(
ChanIds[parsedMessage.chanId]),因为我们要把chanId的具体值作为键名。如果用点语法(ChanIds.parsedMessage.chanId),会把字符串"parsedMessage.chanId"当成键,这显然不是我们想要的结果。 - 符合示例预期:当收到你提供的示例消息时,代码会输出
chanId: 4, pair: BTCUSD,同时ChanIds会被更新为{4: "tBTCUSD"},完全匹配你的期望。
额外提醒:
如果后续收到相同chanId的消息,新的symbol值会覆盖之前的内容——这是对象键的特性,如果你需要避免覆盖,可以先判断ChanIds[parsedMessage.chanId]是否存在再做处理。
内容的提问来源于stack exchange,提问作者Лена Фролова
相关产品推荐
相关产品推荐

