Получение "Циркуляра", добавленного к моему массиву в Javascript - PullRequest
1 голос
/ 15 апреля 2020

В процессе обучения Javascript. Я написал код, который проходит через массив и добавляет их в массив res. Он также go пройдет через вложенные массивы и добавит их элемент за элементом в res. Я использовал рекурсию для этого. Но после завершения каждого вложенного массива я получаю Circular, добавляемое к res. Невозможно найти, где проблема.

var res = ["oldarray"];

function findthis(xar){
  for(let n=0; n<xar.length; n++) {
    if(xar[n] instanceof Array) {
      res.push(findthis(xar[n]));
    } else {
      res.push(xar[n]);
    }
  }
  return res;
}

var d = ["z", 9, 2, ["r", "r", ["X","X","X","X"], "r"], "f", "x"];

console.log(findthis(d));

вывод, который это дает. когда это должен быть массив без добавления [Циркуляр]

['oldarray', 'z', 9, 2, 'r', 'r', 'X', 'X', 'X', 'X', [Circular], 'r', [Circular], 'f', 'x']

1 Ответ

2 голосов
/ 15 апреля 2020

[Circular] выводится на печать, когда вы пытаетесь напечатать массив или объект, который содержит ссылку на себя. Здесь вы получаете это, потому что вы получаете sh результат findthis (то есть res) в res сам. Чтобы это исправить, просто удалите вызов на push в этом случае:

function findthis(xar){
  for(let n=0; n<xar.length; n++) {
    if(xar[n] instanceof Array) {
      findthis(xar[n]); // Here! findthis already pushes to res, no need for another push
    } else {
      res.push(xar[n]);
    }
  }
  return res;
}
...