Я новичок в скриптах приложений Google. Все идет нормально. Попытка сделать некоторые вещи, которые я использовал в БД MsAccess. Я думаю, что у меня есть проблема, которая может быть связана с огромным количеством данных, которые у меня есть. Чтобы проиллюстрировать мою проблему:
У меня два массива:
**Array1**
ID || Name <br>
0001 || Peter<br>
0005 || Arthur<br>
0008 || Gloria<br>
0010 || Martin<br>
0014 || Jess <br>
**Array2**
ID || Age <br>
0001 || 23<br>
0002 || 18<br>
0005 || 24<br>
0010 || 7<br>
Как вы можете себе представить, я хочу создать нечто вроде:
**Array3**
ID || Name || Age <br>
0001 || Peter || 23<br>
0005 || Arthur|| 24 <br>
0010 || Martin || 7<br>
Я использовал самый простой код, который я могу придумать для "join":
for (var a=0; a<array1.length; a++) {
for (var b=0; b<array2.length; b++) {
if (array1[a][0] == array2[b][0]) {
array3.push([array1[a][0],array1[a][1],array2[b][1]); break;
}
}
}
Проблема в том, что array1 составляет 70 000 записей, а array2 составляет около 10 000 записей, что означает, что код заканчивается.
Что бы вы сделали, ребята?
Создайте вспомогательный объект, имена свойств которого являются значениями id из array2 (или array1; вы можете попробовать оба и посмотреть, что быстрее):
var a2map = {};
for (var a = 0; a < array2.length; a++)
a2map[array2[a][0]] = array2[a];
Теперь вы можете выполнять итерацию через array1 в поисках совпадений:
for (var a = 0; a < array1.length; a++)
if (array1[a][0] in a2map)
array3.push([ array1[a][0], array1[a][1], a2map[array1[a][0]][1] ]);
У вашего оригинального алгоритма будет время выполнения, которое примерно пропорционально 70000 * 20000
, что является большим числом. Это будет ближе всего к 90000
или около того, делая это в тысячи раз быстрее.