我有一个像这样的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"])
我可以使用过滤器来获得预期的结果吗?
答案 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')