Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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_Python - Fatal编程技术网

Javascript 根据有关元素的无序规则排列列表

Javascript 根据有关元素的无序规则排列列表,javascript,python,Javascript,Python,我正在用Javascript和Python编写一个布局引擎,但我有一个鸡和蛋的问题。我觉得解决办法很简单,但我现在还看不到 我有一个带有x和y坐标的小部件列表。它们在一个列表中 我想根据规则设置它们的x和y 规则的顺序应该无关紧要——它们应该生成相同的小部件顺序,而不管它们的顺序如何。这就是我现在的问题。我似乎无法使排序独立于规则的排序。任何顺序的同一组规则都应该生成相同的小部件Xs和Ys 我的规则是这样的: [ "blogSidebar hasSize 4", "menu ab

我正在用Javascript和Python编写一个布局引擎,但我有一个鸡和蛋的问题。我觉得解决办法很简单,但我现在还看不到

我有一个带有x和y坐标的小部件列表。它们在一个列表中

我想根据规则设置它们的x和y

规则的顺序应该无关紧要——它们应该生成相同的小部件顺序,而不管它们的顺序如何。这就是我现在的问题。我似乎无法使排序独立于规则的排序。任何顺序的同一组规则都应该生成相同的小部件Xs和Ys

我的规则是这样的:

[
    "blogSidebar hasSize 4",
    "menu above heroPost",
    "blah rightOf heroPost",
    "featuredPosts above blogs",
    "header above menu",
    "heroPost above featuredPosts",
    "menu hasSize 12",
    "heroPost hasSize 6",
    "menu",
    "featuredPosts",
    "heroPost",
    "header above featuredPosts",
    "header",
    "blogs hasSize 8",
    "blogSidebar rightOf blogs",
    "featuredPosts above blogs",
    "blah2 leftOf blah",
    "header above heroPost"
]
  • 可以忽略hasSize和单词声明规则
  • RightOf意味着小部件的.x坐标应为+1 另一个
  • LeftOf表示.x坐标相对于另一个坐标应为-1 一个
  • 上面的意思是.y坐标相对于另一个坐标应为-1
我试图从这个规则列表中设置小部件x和y坐标,这些规则应该是任意顺序的

如何将规则映射到小部件x和ys,以便规则的顺序无关紧要?

我的代码在这里:您可以在浏览器中运行它。洗牌是我用来测试规则顺序独立性的,目前在第479行被注释掉了

我在python Stackoverflow chat上询问的一个已解决的问题是如何解决如下等式:

[
    "blogSidebar hasSize 4",
    "menu above heroPost",
    "blah rightOf heroPost",
    "featuredPosts above blogs",
    "header above menu",
    "heroPost above featuredPosts",
    "menu hasSize 12",
    "heroPost hasSize 6",
    "menu",
    "featuredPosts",
    "heroPost",
    "header above featuredPosts",
    "header",
    "blogs hasSize 8",
    "blogSidebar rightOf blogs",
    "featuredPosts above blogs",
    "blah2 leftOf blah",
    "header above heroPost"
]
widgetA.x
我使用这个算法:

答案是运行addRule算法两次。一旦遇到as规则,最后再次修复运行算法累积的任何错误


您可以找到:

答案是运行addRule算法两次。一旦遇到as规则,最后再次修复运行算法累积的任何错误

您可以找到: