Maison  >  Questions et réponses  >  le corps du texte

javascript - Traversée imbriquée de Map et forEach, comment renvoyer un tableau?

Scénarios d'application

Le filtrage d'une table peut impliquer plusieurs conditions de filtrage, this.filter里面存的是所有筛选条件的v-model状态的一个对象,this.tableData是从后端获取的所有原始表格数据的数组,this.filteredTableDataest un tableau de données de table filtrées.

Code

    filterTableData() {
      this.filteredTableData = this.tableData.map((item, index) => {
        Object.keys(this.filter).forEach(key => {
          if (this.filter[key] && item[key] && item[key] === this.filter[key]) {
            console.log(item)
            return item
          }
        })
      })
      console.log(this.filteredTableData)
      // this.paginateTableData()
    },

Question

Écrire ainsi fera le deuxième console.log(this.filteredTableData)拿到一个全部是undefined tableau. Cette erreur devrait être due au fait que forEach ne peut pas utiliser return pour sortir de la boucle.
Alors je veux savoir :

曾经蜡笔没有小新曾经蜡笔没有小新2690 Il y a quelques jours978

répondre à tous(7)je répondrai

  • 漂亮男人

    漂亮男人2017-05-19 10:23:54

    Utilisez [].filter directement...

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-19 10:23:54

    La question est un peu difficile à comprendre
    Si vous souhaitez convertir la carte en tableau
    entrez simplement [...map] et c'est tout

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-19 10:23:54

    le filtre est plus approprié.

    De plus, d'où vient l'idée selon laquelle l'ajout d'une variable affecte les performances. Ne vous fiez pas à deviner qu'il y aura des problèmes de performances avant que des problèmes de performances ne surviennent.

    Soit vous utilisez une boucle for ordinaire à la place, soit vous devez définir une valeur booléenne en dehors de forEach pour juger.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:23:54

    J'ai déjà rencontré des problèmes causés par l'utilisation de map et forEach, et je les ai résolus plus tard en utilisant for...in et for...of raisonnablement. Pouvez-vous changer votre façon de penser et ne pas nécessairement utiliser map et forEach pour le résoudre.

    répondre
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:23:54

    Ne l'utilisez pas dans forEach

    filterTableData() {
          var that = this;
          this.filteredTableData = this.tableData.map((item, index) => {
            Object.keys(that.filter).forEach(key => {
              if (that.filter[key] && item[key] && item[key] === that.filter[key]) {
                console.log(item)
                return item
              }
            })
          })
          console.log(this.filteredTableData)
          // this.paginateTableData()
        },

    répondre
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:23:54

    Permettez-moi de répondre à votre question sur le tableau contenant undefined. undefined的问题吧。

    你在map函数里 没有return

    S'il n'y a pas de return dans la fonction map, bien sûr il n'y aura pas de valeur de retour. La valeur de retour qui n'est pas affichée est bien sûr indéfinie.

    Cela équivaut au résultat de votre parcours qui n'est pas renvoyé, ce qui est un effort inutile.

    La fonction de rappel de map ne devrait-elle pas être écrite comme ceci ?

    (item, index) => {
        return Object.keys(this.filter).forEach(key => {
            if (this.filter[key] && item[key] && item[key] === this.filter[key]) {
                console.log(item)
                return item
            }
        })
    }
    Faites simplement comme si je n’avais pas répondu et relisez-la. Vous connaissez cette question. return Object.keys(this.filter) n'a aucun sens pour vous.

    Vous devez toujours utiliser une variable intermédiaire, telle que : 🎜
    this.filteredTableData = this.tableData.map((item, index) => {
        var _item;
        Object.keys(this.filter).forEach(key => {
            if (this.filter[key] && item[key] && item[key] === this.filter[key]) {
                console.log(item)
                _item = item;
                // return item
            }
        })
        return _item
    })
    
    // 你要考虑声明变量的性能损失的话 可以在外层声明好 用完 释放掉。
    
    var _item;
    this.filteredTableData = this.tableData.map((item, index) => {
        Object.keys(this.filter).forEach(key => {
            if (this.filter[key] && item[key] && item[key] === this.filter[key]) {
                console.log(item)
                _item = item;
                // return item
            }
        })
        return _item
    })
    _item = null

    répondre
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:23:54

    Je ne sais pas si tu penses ça.


    filterTableData () {
        this.filteredTableData = this.tableData.filter((item, index) => {
          return Object.keys(this.filter).some(key => this.filter[key] && item[key] && item[key] === this.filter[key])
        })
        console.log(this.filteredTableData)
        // this.paginateTableData()
    }

    répondre
    0
  • Annulerrépondre