2017-08-16 82 views
0

我有一个React对象列表。我可以在.map以上的对象。但我不想要他们全部。我需要根据属性进行过滤。所以我这样做:过滤数组后,.map不是函数

const myFilteredList = myList.filter((item) => { 
    return item.name === 'the filter'; 
    }); 

一旦我这样做,我不能映射在myFilteredList

Uncaught (in promise) TypeError: myFilteredList.map is not a function 

我明白这意味着它现在是一个对象,而不是一个数组,所以我试过,旨在将其转换为一个数组:

let theArray = [] 
theArray = Object.keys(resultCampaigns).map(key => resultCampaigns[key]); 

但我仍然不能映射在theArray

这样做的正确方法是什么?

+1

这应该在一个比较正常的环境下工作...... – jkris

+0

你可以显示myList数据吗? –

+0

你有没有试过这样做只是过滤和映射独立的JS?这应该作为[filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)将始终返回一个数组。你可以console.log myList和myFilteredList吗? – user2340824

回答

0

答案最终与我想要做的事无关,但我会在这里发布它,以便其他人可以看到。我在我的问题中所要做的事情将会奏效。因为我是做这个设置在我render()myFilteredList价值,他们并没有为我工作:

const myFilteredList = this.state; 

我相信这是我的覆盖过滤阵列。不要这样做。我删除了上面的代码行,现在很好。

我真正的问题是在下面的评论概述:我只是做

this.state.myFilteredList 

,而不是仅仅myFilteredList

编辑访问数组。我已经简单地忘记了const { myFilteredList } = this.state;中的花括号,我已经更新了我的代码以反映这种微小的变化,现在很好。

+0

你也可以这样做:const {myFilteredList} = this.state; – Ved

+1

@Ved - 哦,我的天哪。这正是我所做错的。我在我的其他汽车上使用了支架,但由于某种原因,将它们留在了这个上,没有注意到。我以这种方式加回来。谢谢。 –