【问题标题】:React Native - get value of json depending on dynamic stateReact Native - 根据动态状态获取json的值
【发布时间】:2018-05-11 07:35:23
【问题描述】:

我有一个从 API 获取的 json 并将其存储到 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's value 填充

所以取决于selected 的例子,我会得到一个结果:[3, 4]

因为 json 有一个名为 namekeyvaluePrimary Category,而 selected statevalue Primary CategoryFracture 所以我的值为 FK_Diagnosis_Content_ID json,同样关于Anatomy: 'Hip'

我不知道你们是否都知道我想要什么,但是如果您需要其他信息,请随时问我,

希望有人可以帮助我

【问题讨论】:

  • this.state.select 是对象还是数组?
  • @bennygenel this.state.selected 是第一次使用[ ] 的数组
  • 第一次是什么意思? [ 'Primary Category': 'Fracture', Anatomy: 'Hip'] 不是有效语法。它应该是[{ 'Primary Category': 'Fracture'}, {Anatomy: 'Hip'}]{ 'Primary Category': 'Fracture', Anatomy: 'Hip'}
  • 但是console.log(this.state.selected) 时我有这些语法,我不知道是真的,但如果你能用你建议的语法解决我的问题,我可以稍后更改
  • 你能澄清你的对象和问题吗? systax 似乎有问题。

标签: javascript json react-native


【解决方案1】:

您可以使用Object.keys()Array.prototype.includes()

示例 1

// Let's 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]

【讨论】:

  • 你能给我一个使用数组([{ 'Primary Category': 'Fracture'}, {Anatomy: 'Hip'}])而不是对象的例子吗?还是sample 2 是一个数组示例?
  • @Flix 添加了第三个示例
  • 你的嵌套 if 不起作用,所以当我试图找到时,我有一个未定义的 while `console.log(this.state.selected[d.name])
  • @Flix 你是对的。现在修复它,但它有点复杂的解决方案。
  • 当然,感谢您的编辑,先生,现在可以正常工作了
【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2016-03-28
    相关资源
    最近更新 更多