Как правильно перебрать JSON-сообщение из websocket? - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно переключиться между пятью различными типами сообщений JSON, которые я получаю от WebSocket, и запустить функцию для соответствующего типа, чтобы внести изменения в наблюдаемые в 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, являющимся объектом с ключами, которые связывают меня с необходимыми функциями.Но Эслинт говорит, что я не должен использовать для ... in.

, в настоящее время использую его вот так, он работает, но его дерьмовый код.

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

любые советы, как решить это, используяArray.prototype.map ()

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Если вам нужно действовать в зависимости от схемы объекта, который вы получаете, возможно, вы можете сделать что-то вроде

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
0 голосов
/ 08 марта 2019

Вы можете просто определить свой объект сопоставления, который сопоставляет каждое свойство с определенной функцией, и таким образом вы сможете увидеть все функции сопоставления только из одного объекта.

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

Тогда вы просто перечислитеобъект ответа

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

Таким образом, у вас будет четкий обзор всех ваших отображений, которые будут вызываться для каждого свойства ответа, определенного на вашей карте.

0 голосов
/ 21 февраля 2019

Вы можете повторить свой 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(...)
   }
}
...