【问题标题】:Use json to populate a case switch statement in React在 React 中使用 json 填充 case switch 语句
【发布时间】:2020-07-22 07:04:24
【问题描述】:

我有以下 switch/case 语句,它从下面的 json 对象返回数据。实际上这会很长!

切换语句

switch(val){
    case 'chicken':
        return json['meat']['main'][val]; 
        break;
    case 'beef':
        return json['meat']['main'][val]; 
        break
    case 'lamb':
        return json['meat']['main'][val]; 
        break;
    case 'pork':
        return json['meat']['main'][val]; 
        break;
    default:
        return '';
}

json 对象

json={
  "meat": {
    "main": {
      "chicken": "Roast chicken and vegetables",
      "beef": "Beef and Yorkshire pudding",
      "lamb": "Lamb shank with red currant gravy",
      "pork": "Pork and apple sauce",
    }
  }
}

如您所见,switch 语句非常重复,因为每个 case 语句都返回相同的表达式(尽管它返回的值会因访问对象中的变量键 [val] 而不同)。

实际上,我的 json 文件很大,所以我想避免为每种肉(鸡肉、牛肉、羊肉、猪肉)手动输入 case 语句。相反,我想遍历我的 json 对象,获取 json['meat']['main'][i] (其中 i 是一个计数器)的值来创建每个案例。这可能吗?如果没有,是否有替代方法?

非常感谢!

凯蒂

【问题讨论】:

  • 您能多解释一下您的用例吗?对于上述情况,您可能不需要 switch 语句。 return json.meat.main[val] 应该可以工作
  • 您的switch 声明没有任何意义。如果您使用json['meat']['main'][val],您将直接访问正确的值。

标签: javascript reactjs loops object switch-statement


【解决方案1】:

这是你需要的吗?

let json = {
  "meat": {
    "main": {
      "chicken": "Roast chicken and vegetables",
      "beef": "Beef and Yorkshire pudding",
      "lamb": "Lamb shank with red currant gravy",
      "pork": "Pork and apple sauce",
    }
  }
}


const search = (obj, val) => {      
  const keys = Object.keys(obj)
  for (const key of keys) {
    if (typeof obj[key] === 'string') {
      if (key === val) {
        return obj[key]
      }
    } else {
      const description = search(obj[key], val)
      if (description) {
        return description
      }
    }
  }
  return ''
}


const description = search(json, 'beef')
console.log(description)

【讨论】:

  • 不就是这样吗? return json.meat.main['chicken']
  • 我假设val 可能类似于“苹果”,它不属于“肉类”类别。所以你不能做json.meat.main['apple']json.fruit.main['apple']
  • 是的。如果是这样的话,这是有道理的。但从问题来看,他需要一个简单的返回肉.main ['val']。 Instead I would like to iterate through my json object getting the value at json['meat']['main'][i]
  • @twhar​​mon - 你成功了!这太聪明了——喜欢你的答案,当我把它放到我的真实代码中时它工作得很好,这要复杂得多。太感谢了!你已经完全按照我的意图解释了我的问题。你说得对,我需要一切都是可变的,所以需要为苹果和其他东西等工作。再次感谢 - 对这个解决方案非常满意:-)
猜你喜欢
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 2016-06-27
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
相关资源
最近更新 更多