在 Javascript 中将 "Circular" 添加到我的数组中

Getting a "Circular" added to my array in Javascript

在学习的过程中Javascript。 我写了一个代码,它遍历一个数组并将它们添加到 res 数组。它还将遍历嵌套数组并将它们逐个元素添加到 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));

给出的输出。当它应该是一个没有添加 [Circular]

的数组时
['oldarray', 'z', 9, 2, 'r', 'r', 'X', 'X', 'X', 'X', [Circular], 'r', [Circular], 'f', 'x']

[Circular] 当您尝试打印数组或包含对自身的引用的对象时,会打印出来。在这里,您得到它是因为您将 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;
}