Javascript 数组方法错误:TypeError:无法读取属性';过滤器';未定义的

Javascript 数组方法错误:TypeError:无法读取属性';过滤器';未定义的,javascript,ecmascript-6,lodash,Javascript,Ecmascript 6,Lodash,因此,我试图从数组中删除一些元素。我有2个过滤器需要调用。一个用于使用搜索框过滤数据,另一个用于根据条件过滤数据。但我得到了这个错误: TypeError:TypeError:无法读取未定义的属性“filter” 这是一个组件: const PassengerCardBasedOnRoute = ({ searchParam, passengerCardId, isAddToMyPassengersSuccess, unassignedDropOffPassengers, })

因此,我试图从数组中删除一些元素。我有2个过滤器需要调用。一个用于使用搜索框过滤数据,另一个用于根据条件过滤数据。但我得到了这个错误:

TypeError:TypeError:无法读取未定义的属性“filter”

这是一个组件:

const PassengerCardBasedOnRoute = ({
  searchParam,
  passengerCardId,
  isAddToMyPassengersSuccess,
  unassignedDropOffPassengers,
}) => {

  // This is the filter that work based on a search parameter
  const filteredData = filterByParam =>
    filterByParam.filter(obj =>
      Object.keys(obj).some(key =>
        String(obj[key])
          .toLowerCase()
          .includes(searchParam.toLowerCase()),
      ),
    );

  // Here is where I need to remove from the array the condition met
  const filterByPassengerCardId = passengersData => {
    remove(passengersData, info => {
      return info.id === passengerCardId;
    });
  };

  const componentToRenderBasedOnParams = info => (
    <View key={info.id}>
      {isAddToMyPassengersSuccess && info.id === passengerCardId && (
        <PassengersAdded name={info.name} id={info.id} />
      )}
      <PassengersInfo
        id={info.id}
        name={info.name}
        searchParam={searchParam}
      />
    </View>
  );

  const showFeedbackIfNoLength = data => {
    if (!passengerCardId && size(filteredData(data))) {
      filteredData(data).map(info => componentToRenderBasedOnParams(info));
    } else if (passengerCardId) {

      // HERE IS WHERE THE APP THROWS THE ERROR
      filteredData(filterByPassengerCardId(data)).map(info =>
        componentToRenderBasedOnParams(info),
      );

    } else {
      return <EmptyState>No records found</EmptyState>;
    }

    return data;
  };

  return (
    <>
      <OptionsModal>{<AllPassengersOptionsModal />}</OptionsModal>
      <View>
        {!navigationStore.index && unassignedDropOffPassengers
          ? showFeedbackIfNoLength(unassignedDropOffPassengers)
          : null}
      </View>
    </>
  );
};
当满足此条件时:

      // HERE IS WHERE THE APP THROWS THE ERROR
      filteredData(filterByPassengerCardId(data)).map(info =>
        componentToRenderBasedOnParams(info),
      );
当满足此其他条件时,一切正常:

   if (!passengerCardId && size(filteredData(data))) {
      filteredData(data).map(info => componentToRenderBasedOnParams(info));
    }

我缺少什么来实现我所需要的?

问题可能来自这里:

  // Here is where I need to remove from the array the condition met
  const filterByPassengerCardId = passengersData => {
    remove(passengersData, info => {
      return info.id === passengerCardId;
    });
  };

也许它没有以您期望的方式工作,至少它没有返回任何东西(返回未定义)。虽然您可能期望从该函数返回数组。

在表达式
Filteredata(filterByPassengerCardId(data))
中,它看起来像是一个
数组;但是,
filterByPassengerCardId(数据)
返回未定义的

filterByPassengerCardId
的返回值更改为
数组
,将不再引发错误

编辑:看到您的评论,您正在使用Lodash's,它实际上返回了一个
数组

在这种情况下,只需编辑
filterByPassengerCardId
即可返回调用
remove
的结果:

const filterByPassengerCardId = passengersData => {
  return remove(passengersData, info => {
    return info.id === passengerCardId;
  });
};
编辑:或者更好,为了简洁:

const filterByPassengerCardId = passengersData => (
  remove(passengersData, ({id}) => id === passengerCardId)
);

在您提供的3行代码片段中,您无法访问
.filter
属性,异常不能来自该行,而是来自其他地方。您好@zerkms我刚刚更新了我的代码。抱歉。那么错误意味着
filterByParam
未定义。这并不奇怪,因为
filterByPassengerCardId
没有返回任何内容。第一个条件得到了正确满足,并且可以正常工作:
if(!passengerCardId&&size(filteredData)(数据)){filteredData(数据).map(信息=>ComponentToUnderbasedParams(信息));}
我建议您再次查看。您正在将返回值从
filterByPassengerCardId(数据)
传递到
filteredData()
中,但是
filterByPassengerCardId
没有
return
语句,因此,它返回
未定义的
未分配的乘客
存在。见我在帖子下面的评论。还有更多的信息。我也刚刚更新了帖子。可能是
filterByPassengerCardId
函数没有按预期工作。是的,filterByPassengerCardId函数接受一个参数PassengerData,当它得到调用时,它是UnassignedDropOffPassenger,这是一个正确的数组。我认为问题在于我在filterByPassengerCardId上调用remove时。它没有返回数组。@是的,我想是这样的!这就是从lodash中删除->我可能做错了什么?函数
filterByPassengerCardId
接受一个参数
PassengerData
,当它得到调用时,它是
UnassignedDropOffPassenger
,这是一个正确的数组。我认为问题在于我在
filterByPassengerCardId
上调用
remove
时。它没有返回数组。它在
filteredData(filterByPassengerCardId(data))
表达式
filterByPassengerCardId
中抛出
undefined
,然后
undefined
被传递到
filteredData
我不确定
删除
是在哪里定义的,但即使
remove
返回数组,
filterByPassengerCardId
也不会返回调用
remove
的结果。即,如果
remove
确实返回数组:
const filterByPassengerCardId=PassengerData=>{return remove(PassengerData,info=>{return info.id==passengerCardId;});}
const filterByPassengerCardId = passengersData => (
  remove(passengersData, ({id}) => id === passengerCardId)
);