JSON 每次都被访问,即使密钥无效
JSON is being accessed every time even with an invalid key
所以我有一个函数,其中有一个 JSON,它的值包含在一个密钥对中,其中密钥作为参数接收,值是另一个的 return函数,如下图。
const normalizeKeyValuePair = (key, value) => {
const propertyHandler = {
speed: normalizeSpeed(value),
actions: normalizeActions(value)
};
return [normalizeField(key), propertyHandler[key] || normalizeValue(value)];
};
问题出在 actions
键上。 normalizeKeyValuePair
收到的每个 key
参数都被扔进 actions
并转到 normalizeActions
。我怎样才能防止这种情况发生?
要理解为什么这是一个问题,这是normalizeActions
。当 actions
是原始类型时,JS 会抛出错误。
const normalizeActions = actions => {
const normalizedActions = [];
for(let action of actions) {
normalizedActions.push([action.name, action.desc]);
}
return normalizedActions;
}
提前致谢。如果需要更多信息,请告诉我!
好像逻辑全错了。您应该在调用规范化函数之前检查 key
,并且只调用适当的函数。
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];
}
每次调用normalizeKeyValuePair
时,都会在创建propertyHandler
时调用normalizeActions(value)
。
这应该符合您的预期:
const propertyHandler = {
speed: normalizeSpeed,
actions: normalizeActions
};
const normalizeKeyValuePair = (key, value) => {
const ph = propertyHandler[key];
return [normalizeField(key), (ph && ph(value)) || normalizeValue(value)];
};
所以我有一个函数,其中有一个 JSON,它的值包含在一个密钥对中,其中密钥作为参数接收,值是另一个的 return函数,如下图。
const normalizeKeyValuePair = (key, value) => {
const propertyHandler = {
speed: normalizeSpeed(value),
actions: normalizeActions(value)
};
return [normalizeField(key), propertyHandler[key] || normalizeValue(value)];
};
问题出在 actions
键上。 normalizeKeyValuePair
收到的每个 key
参数都被扔进 actions
并转到 normalizeActions
。我怎样才能防止这种情况发生?
要理解为什么这是一个问题,这是normalizeActions
。当 actions
是原始类型时,JS 会抛出错误。
const normalizeActions = actions => {
const normalizedActions = [];
for(let action of actions) {
normalizedActions.push([action.name, action.desc]);
}
return normalizedActions;
}
提前致谢。如果需要更多信息,请告诉我!
好像逻辑全错了。您应该在调用规范化函数之前检查 key
,并且只调用适当的函数。
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];
}
每次调用normalizeKeyValuePair
时,都会在创建propertyHandler
时调用normalizeActions(value)
。
这应该符合您的预期:
const propertyHandler = {
speed: normalizeSpeed,
actions: normalizeActions
};
const normalizeKeyValuePair = (key, value) => {
const ph = propertyHandler[key];
return [normalizeField(key), (ph && ph(value)) || normalizeValue(value)];
};