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