基于嵌套值JavaScript/React的过滤器

基于嵌套值JavaScript/React的过滤器,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有一个包含GooglePlacesAPI数据的对象数组 对象具有嵌套数组/对象,我希望根据嵌套数组中的值筛选数据 data = [ { place : "First", address: [ { "types": [ "locality",

我有一个包含GooglePlacesAPI数据的对象数组

对象具有嵌套数组/对象,我希望根据嵌套数组中的值筛选数据

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'