提问,二维数组怎么分别遍历

有一个数组

arr = [{uid: 123}, {uid: 234}, {uid: 345}, {uid: 456}, {uid: 678}, {uid: 789}]

然后把它切割分成两组了

 let index = 0;
 let newArray = [];
 while (index < arr.length) newArray.push(arr.slice(index, index += 3));
 return newArray;

结果是这样

[[{uid: 123}, {uid: 234}, {uid: 345}], [{uid: 456}, {uid: 678}, {uid: 789}]]

现在我想分别取到数组里的对象(不是值),并且保持分组关系不变,然后append到FormData对象,一个分组append一次,就是这里两组的话就append两次,然后每append一次就提交一次数据给后端,请问可以实现吗

补充:每次append的时候只能往新的FormData里append,不能有上一次append的数据

阅读 2.9k
3 个回答

从你回复的评论来看,问题不在怎么遍历上,而是要怎么处理 FormData。

首先,FormData 本身是可以作为参数传递的,但是看你的要求,是想处理成 Query String,也简单,用 URLSearchParams 就能处理

new URLSearchParams(formData).toString()

如果你想遍历所有键值对,直接用 .entries() 就可以

const pairs = [...formData.entries()]

如果想处理成 JSON

Object.fromEntries(formData.entries())

但是像你这个情况加入了多个 uid 的情况只能保留一个,不过可以手工处理

Object.fromEntries(
    [...new Set(a.keys())]
        .map(key => [key, a.getAll(key)])
        // getAll() 拿到的一定是个数组,如果只有一个元素,就展开它
        .map(([k, v]) => [k, v.length > 1 ? v : v[0]])
)

总之,FormData 是可以遍历的,所以要怎么处理都行。URLSearchParams 是个不错的工具类。

for (let i = 0; i< newArray.length; i++) {
    for (let j = 0; j<newArray[i].length; j++) {
        // 在这提交FormData, 读取newArray[i][j]就好了
    }
}

根据你的描述,我感觉是在是formdata.append赋值的时候出了问题,formdata.append的value参数是在只能接受USVString类型和Blob类型的数据的,具体请参考https://developer.mozilla.org...
你可以试试
formdata.append("uid", "123")
这样的写法。

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