Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于另一个数组键和方向(左或右)的数组排序逻辑_Javascript_Arrays_Tree_Logic_Direction - Fatal编程技术网

Javascript 基于另一个数组键和方向(左或右)的数组排序逻辑

Javascript 基于另一个数组键和方向(左或右)的数组排序逻辑,javascript,arrays,tree,logic,direction,Javascript,Arrays,Tree,Logic,Direction,我面临一个场景,需要根据另一个数组的索引和方向(左或右)订购一个数组。这种排序的关键是我有一组基于数组按水平轴排序的图表。这种水平排列基于显示历史数据的Web服务。类似地,还有一个选项可用于查看水平图表的实时值,该图表按垂直(堆栈)排列。当前的逻辑是通过迭代形成水平图的数组来创建垂直图。但问题是,在某些情况下,此迭代涉及另一个导致订单更改的webservice调用。因此,水平顺序与垂直顺序不匹配 如所附图片所示。在图表容器中,图表按顺序排列,并根据其方向排列 图表容器中的排列逻辑: 图表容器为空

我面临一个场景,需要根据另一个数组的索引和方向(左或右)订购一个数组。这种排序的关键是我有一组基于数组按水平轴排序的图表。这种水平排列基于显示历史数据的Web服务。类似地,还有一个选项可用于查看水平图表的实时值,该图表按垂直(堆栈)排列。当前的逻辑是通过迭代形成水平图的数组来创建垂直图。但问题是,在某些情况下,此迭代涉及另一个导致订单更改的webservice调用。因此,水平顺序与垂直顺序不匹配

如所附图片所示。在图表容器中,图表按顺序排列,并根据其方向排列

图表容器中的排列逻辑:

  • 图表容器为空时
    项目A的方向为左
    输出:A(L)
    项目B的方向为左
    输出:B(L)A(L) 方向正确的项目C
    输出:B(L)A(L)C(R) 等等

  • 图表列表中的预期排列逻辑
    L-左方向
    R-右方向

  • 场景-1:

    如果当前状态为:20 10 30 40 50
    国家方向:L

    新增项目:60 L

    预期订单:60 20 10 30 40 50 L L R R

    场景2

    如果当前状态为:10 20 30 40 50
    国家方向:R

    新增项目:60L

    预期订单:60 10 20 30 40 50
    订货方向:左、右

    场景3

    如果当前状态为:50 40 30 20 10
    国家方向:L

    新增项目:60L

    预期订单:60 50 40 20 10 订货方向:L

    场景4

    如果当前状态为:50 40 20 10
    国家方向:L

    新增项目:30L

    预期订单:50 40 30 20 10
    订货方向:L

    场景5

    如果当前状态为:50 40 20 10
    国家方向:左

    新增项目:30L

    预期订单:50 40 30 20 10
    订货方向:L

    我用我的逻辑创建了一个stackblitz,但这在整个场景中都不起作用。在stackblitz中,我在数据文件夹中添加了可能的数据集。 请检查链接,并帮助我使此代码在所有场景中都能正常工作。

    提前谢谢。欢迎任何建议。

    您可以将所有值添加到主数组中,并按方向和值排序

    const
    log=o=>console.log(JSON.stringify(o)),
    符号={L:-1,R:1},
    add=(值,插入)=>[…值,插入].sort((a,b)=>
    (a[1]=“R'”—(b[1]=“R')||
    a[0]*符号[a[1]]-b[0]*符号[b[1]]
    );
    日志(添加([20',L'],[10',L'],[30',R'],[40',R'],[50',R'],[60',L']);//60 20 10 30 40 50升
    日志(添加([10,'R'],[20,'R'],[30,'R'],[40,'R'],[50,'R'],[60,'L']);//60 10 20 30 40 50升R R R R
    日志(添加([50',L'],[40',L'],[30',L'],[20',L'],[10',L'],[60',L']);//60 50 40 30 20 10升
    日志(添加([50',L'],[40',L'],[20',L'],[10',L'],[30',L']);//50 40 30 20 10升
    
    日志(添加([50',L'],[40',L'],[20',R'],[10',R'],[30',L']);//50 40 30 20 10 L
    您可以将所有值添加到主数组中,并按方向和值排序

    const
    log=o=>console.log(JSON.stringify(o)),
    符号={L:-1,R:1},
    add=(值,插入)=>[…值,插入].sort((a,b)=>
    (a[1]=“R'”—(b[1]=“R')||
    a[0]*符号[a[1]]-b[0]*符号[b[1]]
    );
    日志(添加([20',L'],[10',L'],[30',R'],[40',R'],[50',R'],[60',L']);//60 20 10 30 40 50升
    日志(添加([10,'R'],[20,'R'],[30,'R'],[40,'R'],[50,'R'],[60,'L']);//60 10 20 30 40 50升R R R R
    日志(添加([50',L'],[40',L'],[30',L'],[20',L'],[10',L'],[60',L']);//60 50 40 30 20 10升
    日志(添加([50',L'],[40',L'],[20',L'],[10',L'],[30',L']);//50 40 30 20 10升
    
    日志(添加([50',L'],[40',L'],[20',R'],[10',R'],[30',L']);//50 40 30 20 10升
    是否只有正值?是,只有正值。它实际上是另一个的索引array@pilchard恐怕我明白你的意思了。对我来说,这是意料之中的。你能详细说明你只有正值吗?是的,只有正值。它实际上是另一个的索引array@pilchard恐怕我明白你的意思了。对我来说,这是意料之中的。你能接受你的建议吗。我将尝试并更新您。是否有任何方法可以避免将所有值添加到主数组和排序。我的意图是将新添加的项插入到正确的位置,而不是将其添加到一个数组和排序中。这可能吗?如果我错了,我感到好奇和抱歉。在一天结束时,在我的实际用例中,我需要在UI中将其显示为一个列表。因此,我可能需要再次迭代它。对吗?分享你的宝贵想法。感谢编辑版本。逻辑似乎是可行的,我想这可以添加到我的实际用例中。将方向用作正负方向的技巧真的很酷。我没有想到这一点。谢谢你的指导,谢谢你的建议。我将尝试并更新您。是否有任何方法可以避免将所有值添加到主数组和排序。我的意图是将新添加的项插入到正确的位置,而不是将其添加到一个数组和排序中。这可能吗?如果我错了,我感到好奇和抱歉。在英国