React Native - получить значение json в зависимости от динамического состояния

1

Я получил json от API и this.state.data его в this.state.data например:

[
  {
    "name": "Primary Category",
    "value": [
      {
        "value": "Fracture",
        "Diagnosis_Code": ["DIAG003"],
        "name": "Primary Category",
        "FK_Diagnosis_Content_ID": 3,
        "FK_Diagnosis_Category_ID": 1
      },
      {
        "value": "Osteoarthritis",
        "Diagnosis_Code": ["DIAG001"],
        "name": "Primary Category",
        "FK_Diagnosis_Content_ID": 1,
        "FK_Diagnosis_Category_ID": 1
      },
      {
        "value": "Osteonecrosis",
        "Diagnosis_Code": ["DIAG002", "DIAG004"],
        "name": "Primary Category",
        "FK_Diagnosis_Content_ID": 2,
        "FK_Diagnosis_Category_ID": 1
      },
    ]
  },
  {
    "name": "Anatomy",
    "value": [
      {
        "value": "Hip",
        "Diagnosis_Code": ["DIAG001"],
        "name": "Anatomy",
        "FK_Diagnosis_Content_ID": 4,
        "FK_Diagnosis_Category_ID": 2
      },
      {
        "value": "Pelvis",
        "Diagnosis_Code": ["DIAG002", "DIAG003", "DIAG004"],
        "name": "Anatomy",
        "FK_Diagnosis_Content_ID": 6,
        "FK_Diagnosis_Category_ID": 2
      }
    ]
  }
]

и у меня есть динамическое состояние, используя такую функцию:

onChangeTextPress(key, value){
  this.state.selected[key] = value
  //another code
}

пример this.state.selected

["Первичная категория": "Перелом", Анатомия: "Хип")

Я хочу получить FK_Diagnosis_Content_ID json, в зависимости от которого this.state.selected[key] and it value заполнено

поэтому в зависимости от selected примера у меня будет результат: [3, 4]

потому что у json есть key именем name а value - Primary Category, а value selected state Primary Category - это Fracture поэтому у меня есть значение FK_Diagnosis_Content_ID в json, аналогично Anatomy: 'Hip'

Я не знаю, знаете ли вы все, что я хочу, но не стесняйтесь спрашивать меня, нужна ли вам другая информация,

Надеюсь, кто-нибудь может мне помочь

  • 0
    this.state.select объект или массив?
  • 0
    @bennygenel this.state.selected - это массив с [ ] впервые
Показать ещё 3 комментария
Теги:
react-native

2 ответа

1
Лучший ответ

Вы можете использовать Object.keys() и Array.prototype.includes().

Пример 1

// Let assume you have the below structure
const data = { 'Primary Category': 'Fracture', Anatomy: 'Hip' }

Object.keys(data).forEach((key) => console.log(key))
// Output: 
// Primary Category
// Anatomy

Чтобы получить желаемое значение, вы можете использовать что-то вроде ниже

Образец 2

// this.state.selected => { 'Primary Category': 'Fracture', Anatomy: 'Hip' }
const keys = Object.keys(this.state.selected);
const result = [];
this.state.data.forEach((d) => {
  if(keys.includes(d.name)) { 
    d.value.forEach((v) => {
      if(v.value === this.state.selected[d.name]) {
        result.push(v['FK_Diagnosis_Content_ID']);
      }
    })
  }
});
console.log(result);
// Output: [3,4]

Пример 3

// this.state.selected => [{ 'Primary Category': 'Fracture'}, {Anatomy: 'Hip' }]
// Since we know there is only one key in every object
const keys = this.state.selected.map((s) => Object.keys(s)[0])
const result = [];
this.state.data.forEach((d) => {
  if(keys.includes(d.name)) { 
    d.value.forEach((v) => {
      if(v.value === this.state.selected[keys.indexOf(d.name)][d.name]) {
        result.push(v['FK_Diagnosis_Content_ID']);
      }
    })
  }
});
console.log(result);
// Output: [3,4]
  • 0
    Можете ли вы привести пример использования массива ( [{ 'Primary Category': 'Fracture'}, {Anatomy: 'Hip'}] ) вместо объекта? или sample 2 является примером массива?
  • 0
    @Flix добавил третий пример
Показать ещё 3 комментария
-2

Вы можете использовать это как

const key = Object.keys(this.state.selected);
const response = [];
this.state.data.forEach((d) => {
if(key.includes(d.tag)) { 
 d.value.forEach((v) => {
  if(v.value === this.state.selected[d.name]) {
    result.push(v['FK_Diagnosis_Content_ID']);
  }
  })
   }
 });
 console.log(result);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню