下面是一个示例代码,演示了如何过滤嵌套数组并更新数组以及父对象:
function filterNestedArray(arr, target) {
return arr.reduce((acc, curr) => {
if (Array.isArray(curr.children)) {
curr.children = filterNestedArray(curr.children, target);
if (curr.children.length > 0) {
acc.push(curr);
} else if (curr.value === target) {
acc.push(curr);
return acc;
}, []);
// 示例用法
const data = [
{ value: 1 },
{ value: 2, children: [
{ value: 3 },
{ value: 4, children: [
{ value: 5 },
{ value: 6, children: [
{ value: 7 },
{ value: 8 }
{ value: 9 }
const filteredData = filterNestedArray(data, 6);
console.log(filteredData);
上述代码中的filterNestedArray
函数采用递归方式过滤嵌套数组。对于每个元素,如果它的children
属性存在且是一个数组,则对其进行递归调用filterNestedArray
并更新children
属性。如果children
数组的长度大于0,则将当前元素添加到结果数组中。如果当前元素的value
属性等于目标值,则也将其添加到结果数组中。最终返回结果数组。
在示例用法中,我们将data
数组传递给filterNestedArray
函数,并指定目标值为6。最后,将过滤后的结果打印到控制台上。根据示例数据,过滤后的结果应该是:
{ value: 6, children: [
{ value: 7 },
{ value: 8 }