Вопрос:

Использование рекурсии для создания строки JSON (репликация stringify)

javascript json recursion javascript-objects

417 просмотра

1 ответ

203 Репутация автора

Я пытаюсь повторить JSON.stringify () с помощью рекурсии. Я немного сбит с толку относительно того, почему я получаю неопределенный в моей возвращенной строке JSON. Вот что я сделал до сих пор:

var testobj = {num:123,str:"This is a string",bool:true,o:{x:1,y:2},iamnull:null}
var count = 0
var stringifyJSON = function(obj) {

  // your code goes here
  if(obj === undefined){ 
  	return console.log("obj was undefined");
  }
  count = count + 1
  if(count > 20){  //I put this here mostly to stop infinite loops assuming this function wouldn't occur over 20 times.
  	return console.log("failed")
  }  
  var endarray = [];
if(obj !== undefined && typeof(obj)==='object'){  //If the object isn't undefined and the object is an object...

  for(var prop in obj){
   	console.log('"' + prop + '"');
  	endarray.push(stringifyJSON(prop) +'"' + ':' +'"'+ stringifyJSON(obj[prop])) //push the items into the array, using recursion. 
  }
  if(typeof(obj) !== undefined){
  	return '{' + endarray.join() + '}'
  }
}

  
  
};

//end result is "{undefined":"undefined,undefined":"undefined,undefined":"undefined,undefined":"{undefined":"undefined,undefined":"undefined},undefined":"{}}"

//JSON values cannot be a function, a date, or undefined

Может кто-нибудь указать, где я иду не так? При рекурсии у меня возникла проблема с определением источника проблемы.

Автор: Milos Источник Размещён: 07.03.2017 01:24

Ответы (1)


1 плюс

121 Репутация автора

Решение

Есть несколько вещей, необходимых для правильного решения.

Во-первых, у вас нет базового регистра для вашей рекурсии, поэтому на базовом уровне каждой рекурсивной трассировки ничего не возвращается (т. Е. Не определено неявно возвращается). Итак, сначала вы должны добавить базовый случай, когда целые числа, строки, логические значения и другие примитивные типы преобразуются в строки.

Во-вторых, вы также должны проверить это obj !== nullперед своим рекурсивным вызовом, потому что typeof(null), как ни странно , оценивается как «объект».

var testobj = {num:123,str:"This is a string",bool:true,o:{x:1,y:2},iamnull:null}
var count = 0
var stringifyJSON = function(obj) {

  // your code goes here
  if(obj === undefined){ 
    return console.log("obj was undefined");
  }
  count = count + 1
  if(count > 20){  //I put this here mostly to stop infinite loops assuming this function wouldn't occur over 20 times.
    return console.log("failed")
  }  
  var endarray = [];
if(obj !== undefined && obj !== null && typeof(obj)==='object'){  //If the object isn't undefined and the object is an object...

  for(var prop in obj){
    console.log('"' + prop + '"');
    endarray.push(stringifyJSON(prop) +'"' + ':' +'"'+ stringifyJSON(obj[prop])) //push the items into the array, using recursion. 
  }
  if(typeof(obj) !== undefined){
    return '{' + endarray.join() + '}'
  }
}
if (obj !== undefined) {return String(obj)}


};
Автор: Donovan McMurray Размещён: 07.03.2017 01:38
Вопросы из категории :
32x32