Javascript 如果函数位于数组内部或外部,如何在重写JSON.stringify时使用递归并返回不同的值?
我需要用递归重写一个JSON.stringify函数。 如果在对象中找到函数、符号和未定义,则需要省略;如果在数组中找到,则返回null。 但如果函数是唯一传递的参数(不在数组或对象内部),则它们必须返回未定义的 我首先分别检查原语和函数,然后如果传递的参数是数组,我将针对数组中的元素再次递归检查 我需要一种方法,当递归发生时,它还检查函数是否在数组中,然后返回null,但如果它是独立函数,则返回undefined。 我的代码:Javascript 如果函数位于数组内部或外部,如何在重写JSON.stringify时使用递归并返回不同的值?,javascript,json,recursion,stringify,Javascript,Json,Recursion,Stringify,我需要用递归重写一个JSON.stringify函数。 如果在对象中找到函数、符号和未定义,则需要省略;如果在数组中找到,则返回null。 但如果函数是唯一传递的参数(不在数组或对象内部),则它们必须返回未定义的 我首先分别检查原语和函数,然后如果传递的参数是数组,我将针对数组中的元素再次递归检查 我需要一种方法,当递归发生时,它还检查函数是否在数组中,然后返回null,但如果它是独立函数,则返回undefined。 我的代码: var stringifyJSON = function (obj
var stringifyJSON = function (obj) {
var arrOfKeyVals = [],
arrVals = [],
objKeys = [];
/*********CHECK FOR PRIMITIVE TYPES**********/
if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null)
// coerce the value to become a string
return '' + obj;
else if (typeof obj === 'string')
return '"' + obj + '"';
else if (typeof obj === 'function') {
return undefined;
}
else if (Array.isArray(obj)) {
obj.forEach(function (el) {
arrVals.push(stringifyJSON(el));
});
return '[' + arrVals + ']';
}
}
只需在
arrVals.push(stringifyJSON(el))
之间检查递归调用是否返回undefined
。顺便说一句,您需要正确地转义字符串,而不仅仅是在字符串上加引号。与Bergi类似,我将向stringifyJSON“parentIsArray”传递第二个参数。然后在函数条件检查中,如果parentIsArray为空,则可以返回null。我注意到,在检查obj是否为数组之后,您没有检查它是否为对象。你是否考虑过用map数据来做同样的功能?只要在<代码> ARARVS之间进行检查。推(StrugIFyJSON(EL))< /代码>递归调用是否返回<代码>未定义< /代码>。BTW,您需要正确地跳过字符串,而不仅仅是引用它们。与Bergi类似,我会将第二个参数传递给stringifyJSON'parentIsArray'。然后在函数条件检查中,如果parentIsArray为空,则可以返回null。我注意到,在检查obj是否为数组之后,您没有检查它是否为对象。你也考虑过用地图数据做同样的功能吗?