我正在尝试在具有此结构的数组上调用此 deepFilter 函数,但我在控制台中收到此错误:TypeError: Cannot read properties of undefined (reading 'reduce')
,我不知道为什么。我确定这很简单,但我正在画一个空白。
有人可以指出我正确的方向吗?
const items = [
{
"name":"Name1",
"id":58,
"sites":[
{
"id":106,
"name": "Name11",
"items":[
{
"name":"01",
},
{
"name":"02",
},
]
}
]
},
{
"name":"Name2",
"id":47,
"sites":[
{
"name":"Name22",
"id":106,
"items":[
{
"name":"03",
},
{
"name":"04",
},
]
}
]
}
];
const deepFilter = (items, value) => items.reduce((arr, cur) => {
if (cur.name.includes(value)) arr.push(cur);
else if (cur.hasOwnProperty('sites')) {
const subItems = deepFilter(cur.subitems, value);
if (subItems.length) {
cur.subitems = subItems;
arr.push(cur);
}
}
else if (cur.hasOwnProperty('items')) {
const subSubItems = deepFilter(cur.subsubitems, value);
if (subSubItems.length) {
cur.subsubitems = subSubItems;
arr.push(cur);
}
}
return arr;
}, []);
console.log(deepFilter(items, '02'));
回答1
因为 cur.subitems
中的 value 不是数组。
您可以通过像这样添加 && cur.subitems
轻松修复它:
else if (cur.hasOwnProperty('sites') && cur.subitems) {
您在函数中使用递归,因此您应该相应地检查 values 。