Используйте json для заполнения оператора переключения регистра в React - PullRequest
1 голос
/ 09 апреля 2020

У меня есть следующий оператор 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] в объекте).

In В действительности мой файл json огромен, поэтому я хочу не вводить вручную регистр для каждого мяса (курица, говядина, баранина, свинина). Вместо этого я хотел бы пройти через мой json объект, получая значение в json ['meat'] ['main'] [i] (где i - счетчик), чтобы создать каждый случай. Это возможно? А если нет, есть ли альтернативный подход?

Большое спасибо!

Kat ie

1 Ответ

2 голосов
/ 09 апреля 2020

Это то, что вам нужно?

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)
...