gpt4 book ai didi

javaScript 过滤嵌套对象和数组

转载 作者:行者123 更新时间:2023-12-05 00:28:07 28 4
gpt4 key购买 nike

我的用例是这样的。

  • 我有一个包含对象的数组。
  • 每个对象都有一个名为 menu 的数组
  • 该菜单数组再次反对。
  • 每个对象都有一个数组dish_has_categories
  • dish_has_categories数组,如果存在 CategoryId 等于 8 的对象我想过滤掉那个根对象。

  • 我的原始数据对象

    const data = [{
    menuName: "Hot dogs",
    menu: [
    {
    dishId: '1',
    dish_has_categories: [{
    CategoryId: '8'
    }]
    },
    {
    dishId: '2',
    dish_has_categories: [{
    CategoryId: '9'
    }]
    }]
    },
    {
    menuName: "Burgers",
    menu: [{
    dishId: '3',
    dish_has_categories: [{
    CategoryId: '6'
    }]
    }, {
    dishId: '4',
    dish_has_categories: [{
    CategoryId: '4'
    }]
    }]
    },
    {
    name: "Drinks",
    menu: []
    }
    ]


    我的预期结果是

    [{
    menuName: "Hot dogs",
    menu: [
    {
    dishId: '1',
    dish_has_categories: [{
    CategoryId: '8'
    }]
    },
    {
    dishId: '2',
    dish_has_categories: [{
    CategoryId: '9'
    }]
    }]
    }]


    我到目前为止所做的是
    const data2 = data.filter(element => {
    return element.menu.length > 0
    })

    我不知道如何在嵌套对象和数组中进行深度过滤。希望大家都清楚我的问题。

    最佳答案

    您可以使用 filter() 带有嵌套 some() .

    The some() method tests whether at least one element in the array passes the test implemented by the provided function. It returns a Boolean value



    const data = [{ menuName: "Hot dogs", menu: [ { dishId: '1', dish_has_categories: [{ CategoryId: '8' }] }, { dishId: '2', dish_has_categories: [{ CategoryId: '9' }] }] }, { menuName: "Burgers", menu: [{ dishId: '3', dish_has_categories: [{ CategoryId: '6' }] }, { dishId: '4', dish_has_categories: [{ CategoryId: '4' }] }] }, { name: "Drinks", menu: [] } ]

    const res = data.filter(x =>
    x.menu.some(y =>
    y.dish_has_categories.some(z => z.CategoryId === '8')
    )
    );
    console.log(res)

    关于javaScript 过滤嵌套对象和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56371728/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com