Created
March 13, 2020 21:41
-
-
Save ezracelli/9e9975fef8caefb7fc866457cb14ea05 to your computer and use it in GitHub Desktop.
jQuery serializeObject
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function convertArrayObjectsToArrays (obj) { | |
| return (function _traverse (obj) { | |
| if (Object.prototype.toString.call(obj) === '[object Array]') { | |
| return obj.map(el => _traverse(el)); | |
| } | |
| else if (obj && Object.prototype.toString.call(obj) === '[object Object]') { | |
| const keys = Object.keys(obj); | |
| if (!keys.length || keys.find(key => !/\d/.test(key))) { | |
| for (const key in obj) { | |
| if (obj.hasOwnProperty(key)) obj[key] = _traverse(obj[key]); | |
| } | |
| return obj; | |
| } else { | |
| return Object.entries(obj).reduce((prev, [ key, value ]) => { | |
| prev[key] = _traverse(value); | |
| return prev; | |
| }, []); | |
| } | |
| } | |
| else return obj; | |
| })(obj); | |
| } | |
| $.fn.serializeObject = function () { | |
| const obj = $(this).serializeArray().reduce((prev, { name, value }) => { | |
| const names = name.match(/(?<=\[).*?(?=\])/g) || []; | |
| names.unshift.apply(names, name.match(/^[^\[]+/g) || []); | |
| if (!names.length) return prev; | |
| names.reduce((prev, name, i) => { | |
| if (name === '') { | |
| const index = Object.keys(prev).filter(key => /\d/.test(key)); | |
| name = index.length ? Math.max(index) + 1 : 0; | |
| } | |
| prev[name] = names.length - 1 === i ? value : (prev[name] || {}); | |
| return prev[name]; | |
| }, prev); | |
| return prev; | |
| }, {}); | |
| return convertArrayObjectsToArrays(obj); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment