javascript - 即使使用无效的密钥,每次都会访问 JSON
问题描述
所以我有一个函数,其中包含一个 JSON,它的值包含在一个密钥对中,其中密钥作为参数接收,值是另一个函数的返回,如下所示。
const normalizeKeyValuePair = (key, value) => {
const propertyHandler = {
speed: normalizeSpeed(value),
actions: normalizeActions(value)
};
return [normalizeField(key), propertyHandler[key] || normalizeValue(value)];
};
问题出在actions
钥匙上。接收到的每个key
参数normalizeKeyValuePair
都被放入actions
并转到normalizeActions
. 我怎样才能防止这种情况发生?
要了解为什么这是一个问题,这是normalizeActions
. Whenactions
是一个原语,JS 会抛出一个错误。
const normalizeActions = actions => {
const normalizedActions = [];
for(let action of actions) {
normalizedActions.push([action.name, action.desc]);
}
return normalizedActions;
}
提前致谢。如果需要更多信息,请告诉我!
解决方案
好像逻辑全错了。您应该key
在调用 normalize 函数之前进行检查,并且只调用适当的函数。
const normalizeValuePair(key, value) {
let normalKey = normalizeField(key);
let normalValue;
switch(value) {
case 'speed':
normalValue = normalizeSpeed(value);
break;
case 'actions':
normalValue = normvalizeActions(value);
break;
default:
normalValue = normalizeValue(value);
}
return [normalKey, normalValue];
}
推荐阅读
- node.js - 创建读取流(utf-8)而不破坏单词
- javascript - 包装 Redux 的 API 以使存储实例是瞬态的而不是单例的最佳方式是什么?
- reactjs - 使用 React Hooks 每秒改变颜色
- php - Laravel 8 默认根路由在 route:cache 之后不起作用
- flutter - 使用 loadingBuilder 时 Flutter Image.network 不显示?
- php - 在php中上传之前检查文件格式
- firebase - firebase自定义域名动态链接不起作用
- android - BottomNavigationView + NavigationComponent 没有显示任何片段,并且 BottomNavigationView 单击也不起作用
- java - “java 动态 web 项目”和“Gradle 项目”有什么区别
- python - 如何在 clipspy 中获取事实值并将其存储在 python 变量中