首页 > 解决方案 > 将路径数组转换为唯一路径数组

问题描述

我有一组路径,我想将其转换为一组唯一路径。下面是我的尝试,我知道函数 returnPath 中某处有一个递归调用,但不知道如何实现它。

var paths = [{
  out: "KFvEbaKPDC|o|0",
  in: "M7gtymFAo4|i|0"
}, {
  out: "KFvEbaKPDC|o|0",
  in: "53s1L4YLpo|i|0"
}, {
  out: "M7gtymFAo4|o|0",
  in: "DEa78KAyDf|i|0"
}, {
  out: "53s1L4YLpo|o|0",
  in: "R6hUSNn5T5|i|0"
}]

function chainPaths(paths) {
  let localCopy = paths;
  const chainPaths = [];
  localCopy = localCopy.filter((item) => {
    if (item.out.split('|')[0] === 'KFvEbaKPDC') {
      return item;
    }
  })
  console.log(localCopy);
  localCopy.forEach((c) => {
    chainPaths.push(returnUniquePath(c));
  })
}

function returnUniquePath(c) {
  const arr = [];
  arr.push(c.out);
  arr.push(c.in);
  //recursive call here may be??
  return arr;
}

chainPaths(paths)

我希望最终得到一个具有独特路径的数组,如下所示

[[
  "KFvEbaKPDC|o|0",
  "M7gtymFAo4|i|0"
  "M7gtymFAo4|o|0",
  "DEa78KAyDf|i|0"
],[
  "KFvEbaKPDC|o|0",
  "53s1L4YLpo|i|0"
  "53s1L4YLpo|o|0",
  "R6hUSNn5T5|i|0"
]]

让我们想象“KFvEbaKPDC”是一个父节点,这个父节点有输出路径,在 KFvEbaKPDC|o|0 中用“o”表示,到两个子节点“M7gtymFAo4”和“53s1L4YLpo”的输入用“i”表示,每个子节点,即 M7gtymFAo4' 和 '53s1L4YLpo' 具有到另一个节点的输出路径。希望这是有道理的。

可以将独特的路径可视化如下

KFvEbaKPDC|o|0 -> M7gtymFAo4|i|0 -> M7gtymFAo4|o|0 -> DEa78KAyDf|i|0
KFvEbaKPDC|o|0 -> 53s1L4YLpo|i|0 -> 53s1L4YLpo|o|0 -> R6hUSNn5T5|i|0     

我能够树化路径数组,然后能够遍历独特的路径,例如

KFvEbaKPDC -> M7gtymFAo4 -> DEa78KAyDf 

但该解决方案缺乏有关投入、产出和指数的信息

标签: javascriptarraysjson

解决方案


推荐阅读