【发布时间】:2021-03-27 17:11:24
【问题描述】:
在 Javascript 中解决以下问题的最佳方法是什么? 我试图解决它,但我遇到了太多麻烦,甚至不值得发布我当前的代码,这是一个丑陋的烂摊子。
我有一个多维数组“Teams”,其中包含多个数组,其中包含 TeamName(字符串)、WinRecord(数字)、LossRecord(数字)和 Sort_Key(数字),格式如下:[TeamName, W, L, sort_key ]
我的数据如下所示:
Teams = [
['Team A', 25, 2, 88],
['Team B', 20, 7, 84],
['Team C', 20, 7, 76],
['Team D', 20, 7, 54],
['Team E', 20, 7, 65],
['Team F', 20, 6, 34],
['Team G', 19, 8, 67],
['Team H', 20, 7, 11],
...
['Team N', 3, 24, 33]
]
由于某种原因,前面的数据是任意顺序的。
我想要做的是查看多维数组“团队”内部,其中 W-L 记录在相邻数组中是相同的。从之前的数据来看,B、C、D、E 队的 W-L 战绩相同,而且都是相邻的。 F 队不一样,因为虽然它匹配 W,但它不匹配 L。请注意,H 队有相同的 20-7 记录,但由于它不相邻,我们不考虑它来进行比较!
现在我想通过 sort_key 按 ASC 顺序重新组织相邻的团队 B、C、D 和 E。 与另一个数组没有匹配 W-L 的数组必须保持在相同的位置。 因此解决方案如下所示:
Teams = [
['Team A', 25, 2, 88], //stays in the same place because it has no W-L match adjacent
['Team D', 20, 7, 54], //sort_key is the lowest of this "chunk" so this goes first
['Team E', 20, 7, 65], //sort_key second in ASC order
['Team C', 20, 7, 76], //then this one
['Team B', 20, 7, 84], //finally this is the highest sort_key of this "chunk"
['Team F', 20, 6, 34], //stays in the same place because it has no W-L match adjacent
['Team G', 19, 8, 67], //stays in the same place because it has no W-L match adjacent
['Team H', 20, 7, 11], //stays in the same place because its NOT ADJACENT to the last 20-7 team
...
['Team N', 3, 24, 33] //stays in the same place because it has no W-L match adjacent
]
注意:前面的例子有相同 WL 为 20-7 的相邻数组,但可能有更多“块”与匹配的 WL 数组彼此相邻,这可能会发生多次,直到我们到达数组位置'n'。
我的想法是:
-
取第一个数组并与下一个数组比较,如果有W-L匹配则检查下一个,n次直到没有匹配。如果没有匹配,我们继续下一个数组并再次执行此步骤。
-
如果存在相邻的 W-L,我们需要继续检查下一个数组,直到没有完全匹配并停止。所有相邻的匹配数组都可以复制到一个临时数组中。我们需要“从” original_position 保存,因为如果我们从 Teams[2] 一直到 Teams[5] 获取数据,我们需要稍后从位置 2 重新插入排序值。也许将这个 original_position 保存到变量中?
-
我们现在通过 sort_key ASC 对临时数组进行排序。我们现在将 temp 数组“从”original_position 复制到原始 Teams 数组中。
-
我们继续寻找更多这样的匹配,直到我们到达位置“n”,我们可以退出并返回最终正确排序的 Teams 数组。
它看起来并不复杂,但我不知道如何将多维数组与两个匹配值 (W-L) 进行比较...请帮助 :)
【问题讨论】:
标签: javascript function recursion multidimensional-array compare