在列表查询的时候由于查询的信息是复制过来的,可能会出现字符串前后空格,导致查询不到数据
我打算在请求中集中处理所有参数的空格问题
不多说,直接上码
const list = {
a:1,
b:" zjp ",
c:" 你好",
d:"123 ",
e:null,
f:undefined,
g:[1,2,3],
h:[" 4","5 "," 6 ",["7 "," 8"," 9 ",[' 10',"11 "]]],
i:[
{id:1,name:'张三 '},
{id:2,name:' 李四 '}
],
j:{"aa":' 一个对象 ',"bb":'王五','cc':{"dd":' 赵六'}},
z:''
}
list就是要传的参,进行处理
// 用于去掉空格的
const trim = (str) => {
return str.replace(/^\s*(.*?)[\s\n]*$/g,'$1');
}
// 类型判断
const toType = (obj) => {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
const trimHanlde = (data) => {
let param = data
if( !param || toType(param) != 'object' || param == "{}" ){ return {} }
for(let item in param){
if( toType(param[item]) == 'object' ){
param[item] = trimHanlde(param[item])
}
if( toType(param[item]) == 'array' ){
let newArr = param[item]
if( newArr.length > 0 ){
newArr = depArrHandle(newArr)
}
}
param[item] = toType(param[item]) == 'string' ? trim(param[item]) : param[item]
}
return param
}
let depArrHandle = (arr) => {
if( !arr || toType(arr) != 'array' ){ return [] }
arr.map( (i,index) => {
if( toType(i) == 'array' ){
i = depArrHandle(i)
}
if( toType(i) == 'object' ){
i = trimHanlde(i)
}
arr[index] = toType(i) == 'string'? trim(i):i
})
return arr
}
各位大佬,现在这样处理是可以解决问题的,但觉得处理的太繁琐了,有什么最优方法没