假设我们有一个名为“data”的对象数组,其中每个对象都有一个名为“children”的数组字段,其包含此对象的子对象。我们需要编写一个过滤函数,以便返回所有与给定对象“searchObj”匹配的对象及其完全相同的子对象。
可以使用递归函数来实现这一点。下面是一个示例代码,其中“matchesObject”函数检查两个给定的对象是否完全相等:
// 检查两个对象是否完全相等
function matchesObject(obj1: any, obj2: any): boolean {
return JSON.stringify(obj1) === JSON.stringify(obj2);
}
// 过滤所有匹配项及其完全相同的子项
function filterMatchingObjects(objArray: any[], searchObj: any): any[] {
const filteredArray = objArray.filter((obj) => matchesObject(obj, searchObj));
filteredArray.forEach((obj) => {
if (obj.children && obj.children.length > 0) {
const matchingChildren = filterMatchingObjects(obj.children, searchObj.children[0]);
obj.children = matchingChildren;
}
});
return filteredArray;
}
使用示例:
const data = [
{
name: 'Parent1',
children: [
{
name: 'Child1-1',
value: 'value1-1'
},
{
name: 'Child1-2',
value: 'value1-2'
}
]
},
{
name: 'Parent2',
children: [
{
name: 'Child2-1',
value: 'value2-1'
},
{
name: 'Child2-2',
value: 'value2-2'
}
]
}
];
const searchObj = {
name: 'Parent1',
children: [
{
name: 'Child1-1'
}
]
};
const filteredArray = filterMatchingObjects(data, searchObj);
console.log(filteredArray);
在
上一篇:Angular/Typescript-Type<any>andhowtouseifIknowthataspecificpropertyexists
下一篇:Angular/Typescript/RxJs:更新BehaviorSubject值(使用Object.assign)时,观察其变化。