Skip to content

Instantly share code, notes, and snippets.

@emaia
Created April 13, 2020 23:40
Show Gist options
  • Save emaia/cf9c70b8cba34bfd5112d1e4eae38ef4 to your computer and use it in GitHub Desktop.
Save emaia/cf9c70b8cba34bfd5112d1e4eae38ef4 to your computer and use it in GitHub Desktop.
function update(data, keys, value) {
if (keys.length === 0) {
return value
}
let key = keys.shift()
if (!key) {
data = data || {}
if (Array.isArray(data)) {
key = data.length
}
}
let index = +key
if (!isNaN(index)) {
data = data || {}
key = index
}
data = data || {}
let val = update(data[key], keys, value)
data[key] = val
return data
}
const serializeForm = (formData) => {
const filteredEmpty = Array.from(formData.entries()).filter(function ([field, value]) {
return value !== "";
});
return filteredEmpty.reduce((data, [field, value]) => {
let [_, prefix, keys] = field.match(/^([^\[]+)((?:\[[^\]]*\])*)/)
if (keys) {
keys = Array.from(keys.matchAll(/\[([^\]]*)\]/g), m => m[1])
value = update(data[prefix], keys, value)
}
data[prefix] = value
return data
}, {})
}
export default serializeForm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment