簡體   English   中英

基於嵌套值 JavaScript / React 的過濾器

[英]Filter based on a nested value JavaScript / React

我有一個包含來自 Google Places API 數據的對象數組。

對象具有嵌套數組/對象,我想根據嵌套數組中的值過濾我的數據。

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"
                },

我想根據選擇標記的值過濾此數據。 但是我想使用類型數組包含“administrative_area_level_1”的值

IE。 “戈爾韋郡”

例如。 如果 select 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 

所以如果你想過濾一些數組對象,從過濾功能開始

let filtered = data.filter( place => return true/false);

讓我們為“地點”編寫過濾器方法。 您首先想要的是在地址中找到management_area_level_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' ) );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM