Javascript 在React Native Picker中仅呈现唯一标签
我有一个JSON,也可以通过 我只想呈现唯一的客户,这是我迄今为止的代码。它显示所有客户。Javascript 在React Native Picker中仅呈现唯一标签,javascript,reactjs,react-native,ecmascript-6,Javascript,Reactjs,React Native,Ecmascript 6,我有一个JSON,也可以通过 我只想呈现唯一的客户,这是我迄今为止的代码。它显示所有客户。responseData包含对象的“response”数组 <Picker mode="dialog" selectedValue={this.state.customerName} onValueChange={(itemValue, itemIndex) => { this.setState({ customerName: itemValue }); } }
responseData
包含对象的“response”数组
<Picker
mode="dialog"
selectedValue={this.state.customerName}
onValueChange={(itemValue, itemIndex) => {
this.setState({ customerName: itemValue });
}
}
>
{
this.state.responseData.map((item) => (
<Picker.Item label={item.customer} value={item.customer} key={item.customer} />))
}
</Picker>
{
this.setState({customerName:itemValue});
}
}
>
{
this.state.responseData.map((项)=>(
))
}
您需要减少数组以过滤出唯一值,为此您可以使用reduce方法
const数据={
“答复”:[
{
“id”:“1”,
“客户”:“星球大战”,
“项目”:“1977年”
},
{
“id”:“2”,
“客户”:“星球大战”,
“项目”:“1985年”
},
{
“id”:“3”,
“客户”:“矩阵”,
“项目”:“1999年”
},
{
“id”:“4”,
“客户”:“初始阶段”,
“项目”:“2010年”
},
{
“id”:“5”,
“客户”:“星际”,
“项目”:“2014年”
}
]
}
const arr=数据.响应.减少((附件,项目)=>{
如果(!附件包括(项目客户)){
acc.push(项目客户);
}
返回acc;
}, [])
控制台日志(arr)
您可以使用过滤器
检查某个客户
第一次出现的电影是否与循环的当前索引
具有相同的索引。这样你只会得到所有独一无二的
const电影=[
{
id:“1”,
顾客:“星球大战”,
项目:“1977年”
},
{
id:“2”,
顾客:“星球大战”,
项目:“1985年”
},
{
id:“3”,
顾客:“矩阵”,
项目:“1999年”
},
{
id:“4”,
顾客:“开始”,
项目:“2010年”
},
{
id:“5”,
顾客:“星际”,
项目:“2014年”
}
];
const uniqueMovies=movies.filter((电影,索引)=>{
return movies.findIndex(m=>m.customer==movie.customer==index;
});
console.log(uniqueMovies)
您可以使用以下函数,如uniqueArray=removeDuplicates(响应“customer”)
在呈现+1侧边之前,请尝试过滤掉值。注意:使用对象
或集合(如果可用),因为累加器效率更高,因此您不必每次都迭代累加器来检查重复项。@Shubham Khatri:您还可以添加使用集合的代码段吗。非常感谢。
<Picker
mode="dialog"
selectedValue={this.state.customerName}
onValueChange={(itemValue, itemIndex) => {
this.setState({ customerName: itemValue });
}
}
>
{
this.state.responseData.map((item) => (
<Picker.Item label={item.customer} value={item.customer} key={item.customer} />))
}
</Picker>
function removeDuplicates(myArr, prop) {
return myArr.filter((obj, pos, arr) => {
return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
});
}