我需要循环浏览从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()解决问题的任何提示?
答案 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);
}
});
这样,您将对所有映射有一个清晰的概览,将为映射中定义的每个响应属性调用该映射。