Javascript 递归遍历具有多条路径的数组的最有效方法是什么

Javascript 递归遍历具有多条路径的数组的最有效方法是什么,javascript,recursion,Javascript,Recursion,我有一个2d数组,我试图找到最长的序列路径,但有一些警告。我已经完成并创建了一个数组,该数组概述了给定点的所有可能路径: [ { "value": 8, "row": 0, "col": 0, "paths": [{ "row": 1, "col": 0 }, { "row": 0, "col": 1 }] }, { "value": 2, "row": 0, "col": 1, "paths": [{ "row": 1

我有一个2d数组,我试图找到最长的序列路径,但有一些警告。我已经完成并创建了一个数组,该数组概述了给定点的所有可能路径:

[
  {
    "value": 8,
    "row": 0,
    "col": 0,
    "paths": [{ "row": 1, "col": 0 }, { "row": 0, "col": 1 }]
  },
  {
    "value": 2,
    "row": 0,
    "col": 1,
    "paths": [{ "row": 1, "col": 1 }, { "row": 0, "col": 0 }]
  },
  { "value": 4, "row": 0, "col": 2, "paths": [] },
  {
    "value": 0,
    "row": 1,
    "col": 0,
    "paths": [
      { "row": 0, "col": 0 },
      { "row": 2, "col": 1 },
      { "row": 1, "col": 1 }
    ]
  },
  {
    "value": 6,
    "row": 1,
    "col": 1,
    "paths": [{ "row": 0, "col": 1 }, { "row": 1, "col": 2 }]
  },
  {
    "value": 1,
    "row": 1,
    "col": 2,
    "paths": [
      { "row": 2, "col": 2 },
      { "row": 2, "col": 1 },
      { "row": 1, "col": 1 }
    ]
  },
  { "value": 3, "row": 2, "col": 0, "paths": [{ "row": 2, "col": 1 }] },
  {
    "value": 7,
    "row": 2,
    "col": 1,
    "paths": [{ "row": 1, "col": 2 }, { "row": 2, "col": 0 }]
  },
  { "value": 9, "row": 2, "col": 2, "paths": [{ "row": 1, "col": 2 }] }
]
因此,对于第一个点
8->(0,0)
,它可以转到
(0,1)
(1,0)
,在这些点中,该点可能有0到n条路径可遵循。我必须能够测试每一条可能的路径来计算最长的链


我可以让它计算一条路径,但我在测试每一个可能的结果时陷入了困境。

您可以得到一个只包含下一个项目数组的对象,并将项目映射为嵌套节点的下一个项目。为了防止循环结果,您需要提前检查并仅返回到已访问节点的路径

因此,您需要筛选最长的链。此结果获取所有链,并使用带分隔符的紧密联接

const
go=path=>k=>path.includes(k.toString())
? path.join('-')
:object[k].flatMap(go(path.concat(k.toString())),
getKey=({row,col})=>[row,col].join(“|”);
变量数据=[{value:8,行:0,列:0,路径:[{{row:1,列:0},{row:0,列:1}],{value:2,行:0,列:1,路径:[{{row:1,列:1,列:0,列:0},{value:4,行:0,列:2,路径:[},{value:0,行:1,列:0,列:0,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:1,列:路径:{value:[{row:0,col:1},{row:1,col:2}]},{value:1,row:1,col:2},{row:2,col:1},{row:1,col:1},{value:3,row:2,col:0,路径:[{row:2,col 1},{value:7,row:2,col 1,col 1,路径:[{row:1,col row:1,col 2,col row:0,col 2,col 2,col 2,col 2,col 1}},{row:2,col,
keys=Object.assign(…data.map(o=>({[getKey(o)]:o.value})),
object=object.assign(…data.map(o=>({[keys[getKey(o)]]:o.path.map(o=>keys[getKey(o)])})),
结果=Object.keys(Object.map)(go([]);
控制台日志(结果);
console.log(对象);

.as console wrapper{max height:100%!important;top:0;}
请添加您已经完成的操作以及失败的位置。它不会失败。我已获取2d数组的输入
[[8,2,4],[0,6,1],[379]]
并根据某些特定逻辑计算每个点的所有可能路径。我的代码遵循给定点的单个路径(基本上遵循后续路径数组的第一项)。我只是不知道如何在网格中测试每个可能路径。