即使使用无效密钥,每次都会访问 JSON



所以我有一个包含JSON的函数,它的值包含一个键对,其中键作为参数接收,值是另一个函数的返回,如下所示。

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;
}

提前谢谢。如果需要更多信息,请告诉我!

每次调用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)];
};

似乎逻辑都是错误的。在调用规范化函数之前,应检查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];
}

最新更新