javascript - 在数组上使用 Array.reduce 时收到错误

我正在尝试在具有此结构的数组上调用此 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 。

相似文章

php - 挣扎于数组 php 中的索引

从rapidapi获取json数据并尝试将其放入canvasjs图表中。我相信为什么我的图表不打印的问题是因为我创建的数组没有正确的索引。我的数组在所需的每个元素上都有索引0,它的索引为0-13。<!...

pinescript-v5 - Pinescript 循环警报

设置警报时,我正在运行一个循环以循环浏览40项资产的列表,但警报似乎只针对满足条件的第一项资产触发,而不会检查其余资产。我附上了下面的脚本//@version=5indicator(title='sc...

随机推荐

最新文章