cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Traversal bersarang peta dan forEach, bagaimana untuk mengembalikan tatasusunan?

Senario aplikasi

Menapis jadual mungkin melibatkan berbilang keadaan penapisan, this.filter里面存的是所有筛选条件的v-model状态的一个对象,this.tableData是从后端获取的所有原始表格数据的数组,this.filteredTableData ialah susunan data jadual yang ditapis.

Kod

    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()
    },

Soalan

Menulis seperti ini akan membuat susunan console.log(this.filteredTableData)拿到一个全部是undefined kedua. Ralat ini sepatutnya kerana forEach tidak boleh menggunakan return untuk keluar dari gelung.
Jadi saya nak tahu:

曾经蜡笔没有小新曾经蜡笔没有小新2738 hari yang lalu1024

membalas semua(7)saya akan balas

  • 漂亮男人

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

    Gunakan [].tapis terus...

    balas
    0
  • 伊谢尔伦

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

    Soalannya agak sukar untuk difahami
    Jika anda ingin menukar peta kepada tatasusunan
    masukkan sahaja [...map] dan itu sahaja

    balas
    0
  • PHP中文网

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

    penapis lebih sesuai.

    Selain itu, dari mana datangnya idea bahawa penambahan pembolehubah mempengaruhi prestasi. Jangan bergantung pada meneka bahawa ia akan mengalami masalah prestasi sebelum sebarang masalah prestasi berlaku.

    Sama ada anda menggunakan gelung for biasa sebaliknya, atau anda perlu mentakrifkan nilai bool di luar untukEach menilai.

    balas
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:23:54

    Saya pernah menghadapi masalah yang disebabkan oleh menggunakan map dan forEach sebelum ini, dan kemudian menyelesaikannya dengan menggunakan untuk...dalam dan untuk...secara munasabah Bolehkah anda mengubah pemikiran anda dan tidak semestinya menggunakan map dan forEach untuk menyelesaikannya.

    balas
    0
  • 習慣沉默

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

    Jangan gunakan ini dalam 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()
        },

    balas
    0
  • 巴扎黑

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

    Izinkan saya menjawab soalan anda tentang tatasusunan yang mengandungi undefined. undefined的问题吧。

    你在map函数里 没有return

    Jika tiada return dalam fungsi peta, sudah tentu tiada nilai pulangan yang tidak dipaparkan sudah tentu tidak ditentukan.

    Ia sama dengan tidak mengembalikan hasil perjalanan anda dan melakukan kerja yang sia-sia.

    Bukankah fungsi panggil balik peta harus ditulis seperti ini?

    (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
            }
        })
    }
    Cukup berpura-pura saya tidak menjawab dan membacanya lagi Anda tahu soalan ini. kembalikan Object.keys(this.filter) tidak masuk akal untuk anda.

    Anda masih perlu menggunakan pembolehubah perantaraan, seperti: 🎜
    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

    balas
    0
  • 漂亮男人

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

    Saya tidak tahu sama ada itu yang anda maksudkan.


    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()
    }

    balas
    0
  • Batalbalas