小程序 如何将返回来多条数据转为数组?并且setData

小程序
上传多张图片完成后,返回来多条图片真实路径数据,我将它们用JSON.parse转换好了之后。。。。就开始懵了,不懂怎么把它们全部都再转为数组。。。本人基础很差,被赶鸭子上架
请问各位大佬如何将多条返回来的数据转为数组。。。。

uploadBtn: function() {
    let that = this
    wx.chooseImage({
      count: 9,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success(res) {
        that.setData({
          uploadlist: res.tempFilePaths
        })
        let tempFilePaths = res.tempFilePaths
        for (var i = 0; i < tempFilePaths.length; i++) {
          wx.uploadFile({
            url: app.globalData.api + 'Justice/upload' + app.globalData.key,
            filePath: tempFilePaths[i],
            name: 'file',
            header: {
              'content-type': 'multipart/form-data'
            },
            formData: {
              token: wx.getStorageSync('token'),
              village_id: wx.getStorageSync('village_id'),
              gov_id: wx.getStorageSync('gov_id'),
            },
            success(res) {
              let returnPATH = res.data
              console.log(JSON.parse(returnPATH))
            }
          })
        }
      }
    })
  },

下面是两张是转换前和转后返回的数据
图片描述

图片描述

阅读 3.9k
4 个回答
let imgArr = []; // 保存全部url的数组
uploadBtn: function() {
    let that = this
    wx.chooseImage({
      count: 9,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success(res) {
        that.setData({
          uploadlist: res.tempFilePaths
        })
        let tempFilePaths = res.tempFilePaths
        for (var i = 0; i < tempFilePaths.length; i++) {
          wx.uploadFile({
            url: app.globalData.api + 'Justice/upload' + app.globalData.key,
            filePath: tempFilePaths[i],
            name: 'file',
            header: {
              'content-type': 'multipart/form-data'
            },
            formData: {
              token: wx.getStorageSync('token'),
              village_id: wx.getStorageSync('village_id'),
              gov_id: wx.getStorageSync('gov_id'),
            },
            success(res) {
              let returnPATH = JSON.parse(res.data)
              imgArr.push(returnPATH.url)
              console.log(JSON.parse(returnPATH))
            }
          })
        }
      }
    })
  },

最简单粗暴的方法:

声明一个空数组变量,比如let imgArray = [],然后每返回一条数据就把url提出来,用push()方法添加进数组,然后可能还需要再赋值给一个全局变量,方便你后面使用。

这样不就成为一个数组了吗。。。。

如果是需要等待所有数据上传完成后,获取包含全部数据的数组,可使用promise:

    updateFile: function(filePath) {
        return new Promise((resolve, reject) => {
            wx.uploadFile({
                url: app.globalData.api + 'Justice/upload' + app.globalData.key,
                filePath: filePath,
                name: 'file',
                header: {
                  'content-type': 'multipart/form-data'
                },
                formData: {
                  token: wx.getStorageSync('token'),
                  village_id: wx.getStorageSync('village_id'),
                  gov_id: wx.getStorageSync('gov_id'),
                },
                success(res) {
                    resolve(JSON.parse(res.data));
                },
                fail(error) {
                    reject(error);
                }
            })
        })
    },
    uploadBtn: function() {
        let that = this;
        wx.chooseImage({
          count: 9,
          sizeType: ['original', 'compressed'],
          sourceType: ['album', 'camera'],
          success(res) {
            that.setData({
              uploadlist: res.tempFilePaths
            })
            let tempFileUploads = res.tempFilePaths.map(url => this.updateFile(url));
            Promise.all(tempFileUploads).then(dataArr => {
                console.log(dataArr); // 所有上传成功后的链接
            }).catch(error => console.error(error)); 
          }
        })
    },

全局定义一个set结构,监听单个图片上传完成事件后,判断set.has(url), 没有的话add到set中,最后set 转数组。
let set = new Set();
if(!set.has(url)){

set.add(url);

}
let array = [];
if(set.size == imgs.length){

array = Array.from(set);

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题