Skip to content

Instantly share code, notes, and snippets.

@tuxsudo
Last active November 30, 2015 00:18
Show Gist options
  • Save tuxsudo/922310e48db92b61e8ba to your computer and use it in GitHub Desktop.
Save tuxsudo/922310e48db92b61e8ba to your computer and use it in GitHub Desktop.
Serialize Form Contents
export default form => {
let determineValue = elm => {
switch (elm.type) {
case "file":
return elm.files;
case "checkbox":
return elm.checked ? elm.value : [];
case "radio":
return elm.checked ? elm.value : null;
default:
return elm.multiple ? [ ...elm.children ].filter( c => c.selected ).map( c => c.value ) : elm.value;
}
};
return [...form.elements]
// filter out any form element without a name
.filter( elm => elm.name.length > 0)
// map to array of objects with {name, value}
.map(elm=>({ name: elm.name, value: determineValue(elm) }))
// remove empty|null value items
.filter(elm=>elm.value!==""&&elm.value!==null)
.reduce( (l,c) => {
return l[ c.name ]
? {...l, [c.name]: [].concat(l[ c.name ]).concat( c.value ) }
: {...l, [c.name]: c.value };
}, {} );
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment