要实现深度嵌套对象的lodash筛选,可以使用递归
函数
来遍历对象的所有属性,并使用lodash的
pickBy
函数
进行筛选。以下是一个示例
解决方案
:
const _ = require('lodash');
// 递归函数,用于遍历深度嵌套对象
function deepFilter(obj, predicate) {
// 如果对象自身满足筛选条件,则返回该对象
if (_.isPlainObject(obj) && predicate(obj)) {
return obj;
// 遍历对象的属性,如果属性值是对象,则递归调用deepFilter函数
return _.pickBy(obj, function(value) {
if (_.isPlainObject(value)) {
return deepFilter(value, predicate);
// 示例对象
const obj = {
name: 'John',
age: 30,
address: {
street: '123 Main St',
city: 'New York',
country: 'USA'
friends: [
{ name: 'Alice', age: 28 },
{ name: 'Bob', age: 32 }
// 使用deepFilter函数筛选对象
const filteredArray = _.values(deepFilter(obj, function(value) {
return value.age > 29;
console.log(filteredArray);
以上代码中,deepFilter
函数使用递归方式遍历深度嵌套对象。在每次遍历中,首先判断当前对象是否满足筛选条件,如果满足则返回该对象;然后再遍历对象的属性,如果属性值是对象,则递归调用deepFilter
函数。最后,使用_.values
将筛选后的对象转换为数组输出。
在示例中,我们使用deepFilter
函数筛选出age大于29的对象,并将结果存储在filteredArray
中。输出结果为:
{ name: 'John', age: 30 },
{ name: 'Bob', age: 32 }