开发者问题收集

在 React 中过滤后访问过滤后的数据

2021-08-08
62

有一篇帖子,该帖子有一个名为 wasteItemList 的对象数组。我尝试获取数组中这个对象的数据。为此,我使用了一个过滤器,它给出了正确的数据。这就是我尝试的方法。

const wasteItems = posts && posts.wasteItemList && posts.wasteItemList.filter(wasteItem => wasteItem._id===arrayId);
console.log(wasteItems);

这是我从过滤中获得的数据。

过滤结果

我想访问 wasteItems 中的数据。因此,为此我尝试了 console.log(wasteItems._id); ,但我收到一条错误消息,提示“TypeError:无法读取未定义的属性‘_id’”。我该如何解决此错误?

3个回答

首先,您应该使用 find 而不是 filter 来查找元素。它将返回一个元素而不是数组。

const wasteItem = posts?.wasteItemList?.find(wasteItem => wasteItem._id===arrayId);

其次,搜索后的结果可能是 undefined 。因此,您需要在使用后进行检查:

console.log(wasteItems?._id)
Viet
2021-08-08

Array.filter 返回一个数组,因此当您说 wasteItems._id 时,它无法像对象一样访问它。

如果您只寻找特定的 wasteItem,请执行以下操作:

const wasteItem = posts && posts.wasteItemLis.find(wasteItem => wasteItem._id=== arrayId);
Mohaimin
2021-08-08

Array.filter 以数组格式返回数据。要访问数据,您应该对返回的数据使用 map/forEach,或者如果过滤器数据始终包含一个元素,则使用 Array.find 而不是使用 Array.filter。

解决方案 1 -

const wasteItems = posts && posts.wasteItemList && posts.wasteItemList.filter(wasteItem => wasteItem._id===arrayId);
wasteItems.forEach(wasteItem=>{console.log(wasteItem._id)})

解决方案 2 -

const wasteItems = posts && posts.wasteItemList && posts.wasteItemList.find(wasteItem => wasteItem._id===arrayId);
console.log(wasteItems._id);
Rohit Garg
2021-08-08