我有一个包含多级对象的数组,例如:
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/