gpt4 book ai didi

javascript - 基于不同对象在多级对象上应用过滤器

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

我有一个包含多级对象的数组,例如:

list= [ {  
type: { name: 'dog', size:'medium'},
entity: { name: 'Tobby', age: '7'},
},
{
type: { name: 'cat', size:'small'},
entity: { name: 'Garfield', age: '7'},
}
]
我有一个定义的过滤器,例如:
filter={
type: { name:'dog'}}
我需要定义一个函数,以便我可以调用
let filtered = list.thisMagicFilter(filter)
这将在我的列表中进行相应的过滤(在给定的示例中,仅返回第一个元素。
逻辑上,如果过滤器是 {entity:{age:'7'}} ,则应返回两个结果。
我试图在函数式编程中使用 list.filter() ,但这对我来说太复杂了:我正在为它是一个 2 级验证这一事实而苦苦挣扎。
我能得到一些关于如何解决这个问题的提示吗?
先感谢您!

最佳答案

您可以对嵌套对象使用递归过滤器,并手动处理零件文件管理器和零件数据对象,直到不再有嵌套对象。

const
list = [{ type: { name: 'dog', size: 'medium' }, entity: { name: 'Tobby', age: '7' } }, { type: { name: 'cat', size: 'small' }, entity: { name: 'Garfield', age: '7' } }],
filter = { type: { name: 'dog' } },
filterBy = f => o => Object
.entries(f)
.every(([k, v]) => typeof v === 'object'
? filterBy(v)(o[k])
: o[k] === v
),
result = list.filter(filterBy(filter));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 基于不同对象在多级对象上应用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70117321/

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