如何正确循环浏览来自websocket的JSON消息?

时间:2019-02-21 15:46:47

标签: javascript json reactjs websocket mobx

我需要循环浏览从WebSocket接收到的五种不同类型的JSON消息,并启动适当类型的函数,以将其更改为mobx中可观察的。有帮助吗?

例如,简单消息如下:

{ 
    name: asd, 
    prefernces: { 
        pref1:fried fish, 
        pref2:fish sticks 
    }, 
    resident:true
}

或:

{ prevHistory: [
   {
     healthIssues: none,
     isOnLifeSupport:false,
   },
]        

试图这样做

          for (const prop in data) {
                 if (data.hasOwnProperty(prop)) {
             return keyNames[prop];
         } 

keyNames是一个带有将我链接到所需功能的键的对象。但是Eslint说我不应该将...用于。

目前正以这种方式使用它,但可以运行,但它的代码很漂亮。

    Object.entries(data).forEach(([key, value]) => {
        value === name && someFunc();
        value === preferences && getPref();
        value === resident && isResident();
        value === prevHistory && getHistory();
    });

如何使用Array.prototype.map()解决问题的任何提示?

3 个答案:

答案 0 :(得分:0)

您可以通过以下方式迭代json:

json = { "name": "asd", "prefernces": { "pref1":"fried fish", "pref2":"fish sticks" }, 
   "resident":true}

for (var key in json) {
  console.log(json[key])
  if(key == 'type' && json[key] == 'value'){
     applyFunction(...)
   }
}

答案 1 :(得分:0)

如果您需要根据接收到的对象的模式采取措施,也许可以做类似的事情

if ('name' in myObj && 'preferences' in myObj)
  // Do something with this type of object
else if ('prevHistory' in myObj)
  // Do something with this other type of object

答案 2 :(得分:0)

您只需定义将每个属性映射到特定功能的映射对象,就可以仅从一个对象查看所有映射功能。

const map = {
    name: (name) => {},
    preferences: (prefs) => {},
    resident: (resident) => {},
    prevHistory: (history) => {}
}

然后,您只需枚举您的响应对象

Object.entries(response).forEach(([key, value]) => {
    var func = map[key];
    if (func) {
        func(value);
    }
});

这样,您将对所有映射有一个清晰的概览,将为映射中定义的每个响应属性调用该映射。