代码之家  ›  专栏  ›  技术社区  ›  methuselah

对象数组在其上运行筛选器后返回未定义

  •  0
  • methuselah  · 技术社区  · 4 年前

    我有一个数组,其结构如下

    let pageComponents = { pages: [ { "components": [ ... ] }, { "components": [ ... ] } ] };
    

    Remove null entries from array of objects 对于的内容 components

    滤波器

      static deleteEmptyComponentsOnMultiplePages(components) {
        return components['pages'].forEach(obj => {
            obj['components'].filter(item => item !== null);
          }
        );
      }
    
    2 回复  |  直到 4 年前
        1
  •  5
  •   Maheer Ali    4 年前

    forEach 不返回任何内容,只是循环。在这里你需要使用 map() .

    return 回拨的内部 地图() undefined

    static deleteEmptyComponentsOnMultiplePages(components) {
        return components['pages'].map(obj => {
            return obj['components'].filter(item => item !== null);
        });
    }
    

    你可以排除 {} 地图() 隐式返回

    static deleteEmptyComponentsOnMultiplePages(components) {
        return components['pages'].map(obj => obj['components'].filter(item => item !== null));
    }
    

    您可以使用解构来获得更干净的代码

    static deleteEmptyComponentsOnMultiplePages({pages}) {
        return pages.map(({components}) => components.filter(item => item !== null));
    }
    
        2
  •  0
  •   Rohit.007    4 年前

    ForEach 仅为迭代器,其返回类型为void。您需要使用其他迭代器方法,如 map

    let pageComponents = {
      pages: [
      {
        "components": [1, 2, 4, null]
      }, 
      {
        "components": ['a', 'b', null, 'd']
      }
      ]
    };
    
    function deleteEmptyComponentsOnMultiplePages(components) {
        return components.map(obj => {
            return obj.components.filter(item => item !== null);
        });
    }
    
    console.log(deleteEmptyComponentsOnMultiplePages(pageComponents.pages))