在React.js中附加我的状态数组

时间:2017-10-11 03:41:31

标签: javascript arrays reactjs

clickHandler(type) {



    for (var i = 0; i < this.state.pokemon.length ; i++) {

            //console.log(this.state.pokemon[i]);
            //Do something temp1.types[0].type.name
            for(var j = 0; j < this.state.pokemon[i].types.length; j++) {

                if(this.state.pokemon[i].types[j].type.name == type.target.value) {
                    var toBeAppened = this.state.filteredPokemon.slice()
                    toBeAppened.push(this.state.pokemon[i])
                    this.setState({
                        filteredPokemon: this.state.filteredPokemon

                    })


                }


            }

    }
    console.log(this.state.filteredPokemon) 
}

此函数是将状态数组“pokemon”的特定数据部分附加到另一个名为“filteredPokemon”的状态数组的处理程序。

运行之后,我的filteredPokemon只是一个空数组。 我通过使用console.log进行调试来检查这是否有效,但是它没有正确地附加到我的“filteredPokemon”中

可能是什么问题?

2 个答案:

答案 0 :(得分:0)

我可以假设,问题是,你将错误的变量设置为状态。您应该设置toBeAppended数组而不是

clickHandler(type) {
  for (var i = 0; i < this.state.pokemon.length; i++) {
    //console.log(this.state.pokemon[i]);
    //Do something temp1.types[0].type.name
    for (var j = 0; j < this.state.pokemon[i].types.length; j++) {
      if (this.state.pokemon[i].types[j].type.name == type.target.value) {
        var toBeAppened = this.state.filteredPokemon.slice();
        toBeAppened.push(this.state.pokemon[i]);
        // you are adding an item to toBeAppened array, therefore you should set this array into state
        this.setState({
          filteredPokemon: toBeAppened
        });
      }
    }
  }
  console.log(this.state.filteredPokemon);
}

第二个问题可能是,每个宠物小精灵的types数组都是空的,因此第二个嵌套循环没有调用。

尝试调试if条件,可能this.state.pokemon[i].types[j].type.name == type.target.value表达式返回false

答案 1 :(得分:0)

我不确定您是如何处理数据的。什么是口袋妖怪对象?对我来说,处理数据和过滤小宠物的最简单方法应该是这样的:

$q.all

这样过滤你的小宠物应该非常简单:

defer.promise