js 深度对象筛选器
/**
* 深度对象筛选器
* @param {Object} obj 要筛选的对象
* @param {Function} filterFn 筛选函数,返回true保留,false则过滤掉
* @returns {Object} 筛选后的对象
*/
function deepFilter(obj, filterFn) {
if (obj === null || typeof obj !== 'object' || typeof filterFn !== 'function') {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(item => deepFilter(item, filterFn)).filter(filterFn);
}
const filteredObj = {};
for (const [key, value] of Object.entries(obj)) {
if (filterFn(value, key)) {
filteredObj[key] = deepFilter(value, filterFn);
}
}
return filteredObj;
}
// 示例使用:
const originalObject = {
level1: {
level2: {
keepMe: 'yes',
removeMe: 'no'
}
},
level1b: {
level2b: {
keepMeToo: 'yes',
removeMeToo: 'no'
}
}
};
const filteredObject = deepFilter(originalObject, (value, key) => key.includes('keep'));
console.log(filteredObject);
这段代码定义了一个deepFilter
函数,它接受一个对象和一个筛选函数作为参数。如果对象是数组,它会递归地处理数组中的每个元素,并使用筛选函数进行过滤。如果对象是普通对象,它会遍历对象的属性,并对每个属性应用筛选函数。如果筛选函数返回true
,则该属性会被保留在新的对象中。这个函数可以用来深度过滤复杂的嵌套对象,保留符合条件的属性。
评论已关闭