Javascript 如果函数位于数组内部或外部,如何在重写JSON.stringify时使用递归并返回不同的值?

Javascript 如果函数位于数组内部或外部,如何在重写JSON.stringify时使用递归并返回不同的值?,javascript,json,recursion,stringify,Javascript,Json,Recursion,Stringify,我需要用递归重写一个JSON.stringify函数。 如果在对象中找到函数、符号和未定义,则需要省略;如果在数组中找到,则返回null。 但如果函数是唯一传递的参数(不在数组或对象内部),则它们必须返回未定义的 我首先分别检查原语和函数,然后如果传递的参数是数组,我将针对数组中的元素再次递归检查 我需要一种方法,当递归发生时,它还检查函数是否在数组中,然后返回null,但如果它是独立函数,则返回undefined。 我的代码: var stringifyJSON = function (obj

我需要用递归重写一个JSON.stringify函数。 如果在对象中找到函数、符号和未定义,则需要省略;如果在数组中找到,则返回null。 但如果函数是唯一传递的参数(不在数组或对象内部),则它们必须返回未定义的

我首先分别检查原语和函数,然后如果传递的参数是数组,我将针对数组中的元素再次递归检查

我需要一种方法,当递归发生时,它还检查函数是否在数组中,然后返回null,但如果它是独立函数,则返回undefined。 我的代码:

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是否为数组之后,您没有检查它是否为对象。你也考虑过用地图数据做同样的功能吗?