每次即使使用无效密钥也要访问JSON

问题描述 投票:0回答:2

因此,我有一个内含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。当actions是基元时,JS会引发错误。

const normalizeActions = actions => {
  const normalizedActions = [];

  for(let action of actions) {
    normalizedActions.push([action.name, action.desc]);
  }

  return normalizedActions;
}

谢谢。让我知道是否需要更多信息!

javascript node.js json ecmascript-6 key-value
2个回答
1
投票

每次调用normalizeKeyValuePair时,在创建normalizeActions(value)时都会调用propertyHandler

这应该按照您的意图进行:

const propertyHandler = {
  speed: normalizeSpeed,
  actions: normalizeActions
};

const normalizeKeyValuePair = (key, value) => {
  const ph = propertyHandler[key];
  return [normalizeField(key), (ph && ph(value)) || normalizeValue(value)];
};

1
投票

似乎逻辑上是完全错误的。您应该在调用标准化函数之前检查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];
}
© www.soinside.com 2019 - 2024. All rights reserved.