我需要验证、更新、转义数据对象中对象或数组中的每个值字符串,数据总是在改变这一基本方案.我有这个代码是工作的,可以做到better or do less depth of recursion吗?
let data = {
"data": "general",
"another" : ["fbdfdfdfdfdfdfdfdf", "somestring2"],
"MyStringArray" : ["valid_type.pathdir", "/pathdir/desdss"],
"html_data": [
{
"data": [
{
"item_title": "Server Version:",
},
["fbdfdfdfdfdfdfdfdf", "somestring2"],
{
"value_title": "2.0.1"
}
]
},
{
"head_title": "Info app",
"data": [
{
"value_title": "1.0.1"
},
{
"item_title": "javascript Version:",
}
]
}
]
};
let counter = 0
let limit_recursion = 150
function funct(object) {
if ( counter > limit_recursion ) {
throw new Error("limit exceeded, maximum recursion allowed is " + limit_recursion );
}
for ( let key in object ) {
if (typeof object[key] === "string") {
object[key] = validate_escape(object[key]);
}
else if ( _has_array_to_validate_get_string(object[key]) ) { // ["valid_type.pathdir", "/pathdir/desdss"],
object[key][1] = validate_escape(object[key][0], object[key][1]);
}
else if ( Array.isArray(object[key]) && object[key].every(item => typeof item === "string") ) {
object[key].forEach((value, index) => {
object[key][index] = validate_escape(value);
});
}
else if ( Array.isArray(object[key]) && object[key].every( item => typeof item === "object" && !Array.isArray(item) ) ) {
object[key].forEach((value) => {
funct(value);
});
}
else if (typeof object[key] === 'object' && !Array.isArray(object[key]) ) {
funct(object[key])
}
else if ( Array.isArray(object[key] ) ) {
funct(object[key])
}
counter++;
}
return object;
}
关于这里的_has_array_to_validate_get_string,我使用了一个数组来存储键和值来检测类型字符串验证.
大约validate_escape个,是内部类做验证,更新,转义.
function _has_array_to_validate_get_string(array) {
return Array.isArray(array) && array.length === 2 && typeof array[0] === "string" && array[0].includes('valid_type');
}
function validate_escape(var1, var2) {
return var1 + var2;
}