我需要遍历从WebSocket接收的五种不同类型的JSON消息,并启动适当类型的函数以对mobx中的observable进行更改。有帮助吗?
例如,简单消息如下所示:
{
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说我不应该用于... in。
目前正在使用它,它可以工作,但它的sh * tty代码。
Object.entries(data).forEach(([key, value]) => {
value === name && someFunc();
value === preferences && getPref();
value === resident && isResident();
value === prevHistory && getHistory();
});
任何提示如何使用Array.prototype.map()解决它?
你可以用这种方式迭代你的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(...)
}
}
如果你需要采取行动取决于你收到的对象的架构,也许你可以做类似的事情
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
您可以定义将每个属性映射到特定函数的映射对象,这样您就可以从一个对象中看到所有映射函数。
const map = {
name: (name) => {},
preferences: (prefs) => {},
resident: (resident) => {},
prevHistory: (history) => {}
}
然后你只需枚举你的响应对象
Object.entries(response).forEach(([key, value]) => {
var func = map[key];
if (func) {
func(value);
}
});
通过这种方式,您可以清楚地了解将在地图中定义的每个响应属性调用的所有映射。