V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leega0
V2EX  ›  前端开发

一个数组处理合并问题,半天没弄出来想要的结果

  •  
  •   leega0 · 2018-05-23 13:47:16 +08:00 · 1388 次点击
    这是一个创建于 2408 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经过操作产生以下数组

    var arr = [
    {"pid":"12dassdf",
    "source":{"id":"sd1a3","component":"ordinary"},
    "target":{"id":"sdbf3","component":"ordinary"}
    },
    {"pid":"ccdassdf",
    "source":{"id":"sd123","component":"start"},
    "target":{"id":"sd1a3","component":"ordinary"}
    },
    {"pid":"1gdassdf",
    "source":{"id":"er12a","component":"ordinary"},
    "target":{"id":"sdop3","component":"end"}
    },
    {"pid":"62dayhdf",
    "source":{"id":"sdbf3","component":"ordinary"},
    "target":{"id":"sd3bn","component":"ordinary"}
    },
    {"pid":"7udassdf",
    "source":{"id":"sd3bn","component":"block"},
    "target":{"id":"er12a","component":"ordinary","arclist":{"nodes":[{"pid":"结构同上"},...]}}
    },
    ]
    

    求最后生成一个,start 开头的对象顺序数组:

    var newarr = [{"id":"sd123","component":"start"},
    {"id":"sd1a3","component":"ordinary"},
    ...,{"id":"sdop3","component":"end"}]
    

    本来以为很简单的,找到 start 那组,拿到 target,然后根据 target 的 id,去循环匹配 source 的 id,push 到空数组。

    可是实际编码中,普通 for 循环只找打第一个就停止了,再加上还有内部嵌套,又加了个递归,一试就变成了死循环。

    5 条回复    2018-05-23 19:00:10 +08:00
    jasperjia
        1
    jasperjia  
       2018-05-23 16:25:51 +08:00
    在用 G6 做网图吗,手动滑稽
    jasperjia
        2
    jasperjia  
       2018-05-23 16:28:34 +08:00
    我的做法,参照你的话就是,先循环取出所有 id,再根据前序-后续关系对所有 id 进行排序
    leega0
        3
    leega0  
    OP
       2018-05-23 17:00:48 +08:00
    @jasperjia 用的 d3,现在难点就是前序-后序的关联,感谢指点,我去试试
    leega0
        4
    leega0  
    OP
       2018-05-23 18:24:10 +08:00
    此问题终结,用了冒泡排序解决。
    changnet
        5
    changnet  
       2018-05-23 19:00:10 +08:00 via Android
    循环一次,把它们都扔到 kv 结构,同时找出 start。再循环一次,把它们放到数组。

    如果你的 id 都是增长的,不就一简单排序么
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5806 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:40 · PVG 10:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.