Convert JS Object to form data

前端 未结 18 1894
孤街浪徒
孤街浪徒 2020-11-29 17:22

How can I can convert my JS Object to FormData?

The reason why I want to do this is, I have an object that I constructed out of the ~100 form field valu

18条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-29 17:38

    Recursively

    const toFormData = (f => f(f))(h => f => f(x => h(h)(f)(x)))(f => fd => pk => d => {
      if (d instanceof Object) {
        Object.keys(d).forEach(k => {
          const v = d[k]
          if (pk) k = `${pk}[${k}]`
          if (v instanceof Object && !(v instanceof Date) && !(v instanceof File)) {
            return f(fd)(k)(v)
          } else {
            fd.append(k, v)
          }
        })
      }
      return fd
    })(new FormData())()
    
    let data = {
      name: 'John',
      age: 30,
      colors: ['red', 'green', 'blue'],
      children: [
        { name: 'Max', age: 3 },
        { name: 'Madonna', age: 10 }
      ]
    }
    console.log('data', data)
    document.getElementById("data").insertAdjacentHTML('beforeend', JSON.stringify(data))
    
    let formData = toFormData(data)
    
    for (let key of formData.keys()) {
      console.log(key, formData.getAll(key).join(','))
      document.getElementById("item").insertAdjacentHTML('beforeend', `
  • ${key} = ${formData.getAll(key).join(',')}
  • `) }

    提交回复
    热议问题