UNPKG

wasabi-api

Version:
111 lines (95 loc) 4.16 kB
/** * @author 王志勇 * @description 将参数中的数组转为后台可识别的格式 * @description date:2016-10-05 将格式化方法独立出来,尤其是处理数组问题 * @description date:2018-01-05 修正, * * @description date:2021-04-10 修正说明 * @param {*} data 参数 */ export default (data)=> { if(!data) {//空直接返回 return data; } else if(typeof data ==="string"||typeof data==="number") {//直接返回 return data; } else if(data.constructor===FormData) {//参数为FormData,直接返回 return data; } else if(data instanceof Array) { throw new Error("参数必须是字符,空值,对象,FormData,不可以为数组"); } data =arrayFormat(data);//将参数模型中数组转换为对象,再格式式参数 let arr = []; for (let name in data) {//url格式化,并且将参数字符转义 arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name])); } if(arr.length>0) { return arr.join("&"); } else { return null; } /** * 将参数模型中某个参数是数组时转换为对象,再格式式化参数,这样子传入后台mvc请求时能自动转为模型 * @param {*} data 参数 */ function arrayFormat(data={}) { let MvcParameterAdaptive = {}; //验证是否为数组 MvcParameterAdaptive.isArray = Function.isArray || function (o) { return typeof o === "object" && Object.prototype.toString.call(o) === "[object Array]"; }; //将数组转换为对象 MvcParameterAdaptive.convertArrayToObject = function (/*数组名*/arrName, /*待转换的数组*/array, /*转换后存放的对象,不用输入*/saveOjb) { let obj = saveOjb || {}; function func(name, arr) { for (let i in arr) { if (!MvcParameterAdaptive.isArray(arr[i]) && typeof arr[i] === "object") { for (let j in arr[i]) { if (MvcParameterAdaptive.isArray(arr[i][j])) { func(name + "[" + i + "]." + j, arr[i][j]); } else if (typeof arr[i][j] === "object") { MvcParameterAdaptive.convertObject(name + "[" + i + "]." + j + ".", arr[i][j], obj); } else { obj[name + "[" + i + "]." + j] = arr[i][j]; } } } else { obj[name + "[" + i + "]"] = arr[i]; } } } func(arrName, array); return obj; }; //转换对象 MvcParameterAdaptive.convertObject = function (/*对象名*/objName, /*待转换的对象*/turnObj, /*转换后存放的对象,不用输入*/saveOjb) { let obj = saveOjb || {}; function func(name, tobj) { for (let i in tobj) { if (MvcParameterAdaptive.isArray(tobj[i])) { MvcParameterAdaptive.convertArrayToObject(i, tobj[i], obj); } else if (typeof tobj[i] === "object") { func(name + i + ".", tobj[i]); } else { obj[name + i] = tobj[i]; } } } func(objName, turnObj); return obj; }; let arrName = "";//参数名 if (typeof data !== "object") throw new Error("请传入json对象"); if (MvcParameterAdaptive.isArray(data) && !arrName) throw new Error("必须是对象,如果是数组请使用对象包裹!"); if (MvcParameterAdaptive.isArray(data)) { return MvcParameterAdaptive.convertArrayToObject(arrName, data); } return MvcParameterAdaptive.convertObject("", data); } }