动态地从JSON获取数据

时间:2018-01-21 15:17:06

标签: arrays json reactjs ecmascript-6

我有一个像这样的json:

{
   listOfOptions:[
     {
       valueType: "alphabet"
       possibleValues:["a","b"]
     },
     {
       valueType: "integer"
       possibleValues:["1","2"]
     }
   ]

我动态获取这些值名称,因此在我的react函数中我想要相应的可能值:

所以我创建了一个这样的函数:

myjson.listOfOptions.map((item,index)=> {
    if(item.valueType==e)
      return item.possibleValues[0]
})

所以在运行时,如果我设置" e"作为一个整数,然后我得到: [null,"1"] 但我想要的是: "1"(仅限" 1"不是[" 1"])

我可以使用过滤器来获得预期的结果吗?

2 个答案:

答案 0 :(得分:0)

可能的解决方案:

let result = [];

myjson.listOfOptions.forEach((item,index) => {
    if(item.valueType == e)
      result.push(item.possibleValues[0]);
})

console.log('result', result);

或使用 array.reduce

result = myjson.listOfOptions.reduce((result, item, index)=> {
    if(item.valueType == e){
      result.push(item.possibleValues[0]);
    }
    return result;
}, [])

答案 1 :(得分:0)

这是因为Array.map返回的结果数组与输入数组的长度相同。对于输入数组中的第一个对象,回调函数返回null

所以,我认为你正在寻找的东西是这样的;

原始答案

myjson.listOfOptions
  .filter(item => item.valueType==e) // get just the items that match your filter condition
  .map(item => item.possibleValue[0]) // then get the sub attribute's values

已编辑(在评论中提问后)

// get the first object that matches the search condition
let result = myjson.listOfOptions.find(item => item.valueType==e) 
// this will return the first element in the array `possibleValues` of that object that matches the search condition
return result.possibleValues[0]; 
  

专业提示:使用类似lodash的东西进行安全导航;所以return语句看起来像_.get(result, 'possibleValues[0]', 'N/A')