


Processing of converting form serialization type data into objects based on JavaScript (allowing objects to contain objects)_javascript skills
The form serialization type data refers to the format of the data passed by the URL, which is a key/value pair in the form of "key=value&key=value&key=value". Generally speaking, this effect can be achieved using jQuery's $.fn.serialize function. How to convert such format into object?
We know that using jQuery’s $.fn.serializeArray function gets an object with the following structure
[ { name: "startTime" value: "2015-12-02 00:00:00" }, { name: "endTime" value: "2015-12-25 23:59:59" } ]
This is an object array, but sometimes we want to get an object with the following structure
{ "startTime": "2015-12-02 00:00:00" "endTime": "2015-12-25 23:59:59" }
So a conversion function is needed here.
The processing steps are as follows:
1. Use "&" to separate each key-value pair and then loop through each key-value pair
var properties = serializedParams.split("&"); for (var i = 0; i < properties.length; i++) { //处理每一个键值对 evalThem(properties[i]); };
2. Split the specified key-value pairs from the "=" symbol, and use decodeURIComponent to parse the uri component encoding for each key and value (because the serialized data passed by the URL is generally encoded by the uri component)
var strAry = new Array(); strAry = str.split("="); //使用decodeURIComponent解析uri 组件编码 for(var i = 0; i < strAry.length; i++){ strAry[i] = decodeURIComponent(strAry[i]); } var attributeName = strAry[0]; var attributeValue = strAry[1].trim();
3. If the value contains the "=" symbol, additional processing (value merging) is required.
if(strAry.length > 2){ for(var i = 2;i<strAry.length;i++){ attributeValue += "="+strAry[i].trim(); } }
There is a process here, that is, if the value does not exist, it will not be added to the final object. You can choose whether to delete this code or not according to your own situation
if(!attributeValue){ return ; }
4. If the key is "obj.obj.obj" linked by a "." symbol, it needs to be treated as an object containing object. The method of processing is to decompose the key through ".", and then check whether the temporary object obj already contains the decomposed object. If so, append the data to the existing object. The source code is as follows
var attriNames = attributeName.split("."), curObj = obj; for(var i = 0; i < (attriNames.length - 1); i++){ curObj[attriNames[i]]?"":(curObj[attriNames[i]] = {}); curObj = curObj[attriNames[i]]; } curObj[attriNames[i]] = attributeValue.trim();
Here we see that the assignment part is handled in this way on the Internet
eval("obj."+attributeName+"=\""+attributeValue.trim()+"\";");
This is very problematic. One is that it cannot correctly handle the problem that objects in the 4 objects contain objects (especially when two elements have the same parent object, such as "test.id=1&test.name='chua'") owns the parent object test). The other is that when the value attributeValue contains single quotes or double quotes, it cannot be processed correctly. So using assignment "=" is the safest.
So the final complete source code is as follows
/* serializedParams格式为"key1=value1&key2=value2". 也支持'key.sonkey=value' */ function paramString2obj (serializedParams) { var obj={}; function evalThem (str) { var strAry = new Array(); strAry = str.split("="); //使用decodeURIComponent解析uri 组件编码 for(var i = 0; i < strAry.length; i++){ strAry[i] = decodeURIComponent(strAry[i]); } var attributeName = strAry[0]; var attributeValue = strAry[1].trim(); //如果值中包含"="符号,需要合并值 if(strAry.length > 2){ for(var i = 2;i<strAry.length;i++){ attributeValue += "="+strAry[i].trim(); } } if(!attributeValue){ return ; } var attriNames = attributeName.split("."), curObj = obj; for(var i = 0; i < (attriNames.length - 1); i++){ curObj[attriNames[i]]?"":(curObj[attriNames[i]] = {}); curObj = curObj[attriNames[i]]; } //使用赋值方式obj[attributeName] = attributeValue.trim();替换 //eval("obj."+attributeName+"=\""+attributeValue.trim()+"\";"); //解决值attributeValue中包含单引号、双引号时无法处理的问题 curObj[attriNames[i]] = attributeValue.trim(); }; var properties = serializedParams.split("&"); for (var i = 0; i < properties.length; i++) { //处理每一个键值对 evalThem(properties[i]); }; return obj; }
The above content is based on JavaScript's processing of converting form serialization type data into objects (objects are allowed to contain objects). I hope sharing this article can be helpful to everyone.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

In-depth discussion of the root causes of the difference in console.log output. This article will analyze the differences in the output results of console.log function in a piece of code and explain the reasons behind it. �...
