问题
我有一个2d数组,它实际上是输入到Google Sheet中的数据。它按用户定义的逻辑进行排序。位置排序的2d数组
目标是在此表末尾输入新行,然后按位置对其进行排序。
说“的位置”我的意思是“欧洲”变“美”之前,因为用户已经较早进入它。
下面是测试样品阵列:
var data =
[
['Earth', 'Europe', 'Britain', 'London'],
['Earth', 'Europe', 'Britain', 'Manchester'],
['Earth', 'Europe', 'Britain', 'Liverpool'],
['Earth', 'Europe', 'France', 'Paris'],
['Earth', 'Europe', 'France', 'Lion'],
['Earth', 'Europe', 'Italy', 'Rome'],
['Earth', 'Europe', 'Italy', 'Milan'],
['Earth', 'Europe', 'Greece', 'Athenes'],
['Earth', 'Asia', 'China', 'Pekin'],
['Earth', 'Africa', 'Algeria', 'Algiers'],
['Earth', 'America', 'USA', 'Dallas'],
['Earth', 'America', 'USA', 'New York'],
['Earth', 'America', 'USA', 'Chicago'],
['Tatooine', 'Yulab', 'Putesh', 'ASU'],
['Tatooine', 'Yulab', 'Putesh', 'Niatirb'],
['Tatooine', 'Yulab', 'Zalip', 'Duantan'],
['Tatooine', 'Asia', 'Solo', 'Lion'],
['Tatooine', 'Asia', 'Solo', 'To'],
['Earth', 'America', 'USA', 'San Francisco'],
['Tatooine', 'Yulab', 'Koko', 'Traiwau'],
['Venus', 'Yoo', 'Van', 'Derzar'],
['Tatooine', 'Chendoo', 'org', 'Eccel']
];
,正确的结果数组是:
/*
[ [Earth, Europe, Britain, London],
[Earth, Europe, Britain, Manchester],
[Earth, Europe, Britain, Liverpool],
[Earth, Europe, France, Paris],
[Earth, Europe, France, Lion],
[Earth, Europe, Italy, Rome],
[Earth, Europe, Italy, Milan],
[Earth, Europe, Greece, Athenes],
[Earth, Asia, China, Pekin],
[Earth, Africa, Algeria, Algiers],
[Earth, America, USA, Dallas],
[Earth, America, USA, New York],
[Earth, America, USA, Chicago],
[Earth, America, USA, San Francisco],
[Tatooine, Yulab, Putesh, ASU],
[Tatooine, Yulab, Putesh, Niatirb],
[Tatooine, Yulab, Zalip, Duantan],
[Tatooine, Yulab, Koko, Traiwau],
[Tatooine, Asia, Solo, Lion],
[Tatooine, Asia, Solo, To],
[Tatooine, Chendoo, org, Eccel],
[Venus, Yoo, Van, Derzar]
]
*/
我想用一个脚本这一点。
我的解决方案
我做了我自己的脚本的版本,请在这里看到:
https://github.com/Max-Makhrov/positional-sorting/blob/master/main.js
算法如何工作
算法找到组从第一次开始排:地球>欧洲>英国。然后它会尝试在稍后的条目中为这些组找到一个匹配项。
我也想过将更高的索引分配给更早的条目。
问题
的问题:是否有更好的方法:
- 更少的代码来完成相同的任务
- 更普遍的方式来排序位置的阵列
- 需要足够快的解决方案,因为我将使用表单中的代码,并且它有limits on script time。
@Luca,我编辑的问题,限制它,以确定适当的答案。你能重新打开它吗?我已经得到了正确的答案,并希望我的问题对其他用户有所帮助 –