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