javascript - 条件过滤函数

标签 javascript

我的过滤功能有点问题。我有一个数据结构,如下图所示。

bridals array

如您所见,我有一个名为 bridals 的对象数组,它保存另一个名为 plans 的对象数组。所以在里面我试图过滤

这里是过滤函数。

export function peopleFilter(bridals, people){
    if (people.length === 0) {
        return bridals;
    } else {
        bridals.forEach(bridal => {
            bridal.plans.filter((item) => {
                if (item.people === people) {
                    return bridals;
                }   
            })
        })

        return bridals;            
    }
}

peopleFilter() 函数应该过滤 plans 只有选定的值,返回 bridals ,但它什么也不返回。也没有显示错误。

所以我尝试了类似下面的方法。

bridals.forEach(bridal => {
    bridal.plans.slice().reverse().forEach((item, index, object) => {
        if (item.people !== people) {
            bridal.plans.splice(object.length - 1 - index, 1)                    
        }
    })
})

return bridals;

上面的代码正在做我想要的。但是有一个问题。所以最后当我不选择任何值时,它应该显示所有计划。但这并不是因为我每次选择一些值时都使用 splice() 删除了计划。

所以我被困在这个问题上。我该如何解决?

最佳答案

在这种情况下,使用 map 遍历新娘数组可能会更容易。在 map 中,过滤每个新娘的计划,然后返回一个新的对象,这可以通过扩展语法来完成。

    const filterFunc = (bridals, people) => {
        return bridals.map(bridal => {
            const filteredPlans = bridal.plans.filter(plan => plan.people === people);
            return { ...bridal, plans: filteredPlans };
       })
    }

关于javascript - 条件过滤函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58230538/

相关文章:

javascript - AngularJS 使用 ng-options 创建 Set

javascript - 如何从 ajax 调用中检索元素

javascript - 第二次出现 SVG 样式问题 : chrome only

javascript - 是否有可能从 D 2.0 编译为 Javascript?

javascript - angularjs:在中间添加行时检测 ng-repeat 何时完成

javascript - NativeScript 文件选择器 Android

javascript - 删除 cookies chrome 扩展

javascript - 极其奇怪的行为 : IE11 seems to create an invisible tab when scripts are blocked and then allowed - how to fix it?

javascript - 检查 'checked' 复选框

javascript - 如何根据 JQuery 选择的另一个选项隐藏\显示选项的特定值?