基于嵌套值JavaScript/React的过滤器
我有一个包含GooglePlacesAPI数据的对象数组 对象具有嵌套数组/对象,我希望根据嵌套数组中的值筛选数据基于嵌套值JavaScript/React的过滤器,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有一个包含GooglePlacesAPI数据的对象数组 对象具有嵌套数组/对象,我希望根据嵌套数组中的值筛选数据 data = [ { place : "First", address: [ { "types": [ "locality",
data = [
{
place : "First",
address: [
{
"types": [
"locality",
"political"
],
"long_name": "Galway",
"short_name": "Galway"
},
{
**** I want to filter data from here **********
"types": [
"administrative_area_level_1",
"political"
],
"long_name": "County Galway",
"short_name": "G"
**** I want to filter data from here **********
},
]
},
{
place : "Second",
address: [
{
"types": [
"locality",
"political"
],
"long_name": "Dublin",
"short_name": "Dublin"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"long_name": "County Dublin",
"short_name": "D"
},
我想根据select标记的值筛选这些数据。
但是,我想使用类型数组包含“管理\u区域\u级别\u 1”的值
例如“高威县”
例如。
如果选择value=“Galway”
返回第一个对象。等等
这将返回我想要的输出,但我不知道如何将其与过滤器函数合并
data.map((item) => {
item.address.map((item2) => {
if (item2.types.includes("administrative_area_level_1")) {
console.log(item2.long_name.split(" ")[1])
}
})
})
// Logs County Galway but after split, Galway
// If this value = <select>...filter
data.map((项目)=>{
item.address.map((item2)=>{
if(项目2.类型包括(“行政区\级别\ 1”)){
console.log(item2.long\u name.split(“”[1])
}
})
})
//高威县的原木,但在分割后,高威
//如果此值=…过滤器
所以,如果您想过滤一些数组对象,请从filter函数开始
let filtered = data.filter( place => return true/false);
让我们为“地点”编写过滤方法。首先,您需要在地址中查找管理区域级别1
let administratives = place.address.find( c => c.types.include('administrative_area_level_1') );
让我们假设它可以是任意大小,甚至是空的。。。现在,您需要检查是否至少有一个具有“galway”值。所以如果成为
boolean isGalway = administratives.some( a => a.long_name === 'Galway' );
把所有的东西放在一起
const results = data.filter( place => {
let administratives = place.address.find( c => c.types.include('administrative_area_level_1') );
boolean isGalway = administratives.some( a => a.long_name === 'Galway' );
return isGalway;
});
如果你愿意的话,可以缩短
const results = data.filter( place => place.address.find( c => c.types.include('administrative_area_level_1') ).some( a = a.long_name === 'Galway' ) );
这并不完全是你所期望的,但这是一个好的开始,我让你改变你想要的
=='Galway'