Object convert(Object formValues)
{abc:'123'}{abc:'123'}
{abc.ab:'123'}{abc:{ab:'123'}}
{abc[0]:'123', abc[1]:'234'}{abc:['123', '234']}
{abc[0].ab:'123', abc[1].bc:'234'}{abc:[{ab:'123'}, {bc:'234'}]}
Parameters: {Object} formValues 表单对象 @returns {Object} 真正的对象

 

function convert(formValues) {
    var result = {};
    for ( var name in formValues) {
        var value = formValues[name];

        if (name.indexOf('.') < 0) {
            result[name] = value;
            continue;
        } else {
            var simpleNames = name.split('.');

            // 构建命名空间
            var obj = result;
            for ( var i = 0; i < simpleNames.length - 1; i++) {
                var simpleName = simpleNames[i];
                if (simpleName.indexOf('[') < 0) {

                    if (obj[simpleName] == null) {
                        obj[simpleName] = {};
                    }
                    obj = obj[simpleName];

                } else { // 数组

                    // 分隔
                    var arrNames = simpleName.split('[');
                    var arrName = arrNames[0];
                    var arrIndex = parseInt(arrNames[1]);

                    if (obj[arrName] == null) {
                        obj[arrName] = []; // new Array();
                    }
                    obj = obj[arrName];

                    if (obj[arrIndex] == null) {
                        obj[arrIndex] = {}; // new Object();
                    }
                    obj = obj[arrIndex];

                }

            }
            obj[simpleNames[simpleNames.length - 1]] = value;

        }

    }
    return result;
}