JavaScript - что делает эта строка?

Что делает следующий JavaScript?

var groups = countrylist.split(',');    
for( var i = -1, group;  group = groupsCounty[++i]; ){
  ...
}
8
задан digiguru 12 February 2010 в 15:39
поделиться

5 ответов

With i starting at -1
increase i by 1
get the ith element from the groupsCounty array
if there is no such element: stop
otherwise: assign it to group and carry on (with whatever "…" is)

Это оптимизированная версия:

for (var i = 0; i < groupsCounty.length; i++; ){
    var group = groupsCounty[i];
    …
}
11
ответ дан 5 December 2019 в 11:24
поделиться
With i starting at -1
increase i by 1
get the ith element from the groupsCounty array
if there is no such element: stop
otherwise: assign it to group and carry on (with whatever "…" is)

Это оптимизированная версия:

for (var i = 0; i < groupsCounty.length; i++; ){
    var group = groupsCounty[i];
    …
}
-121--3612620-

Если вы не уверены, что элементы в item _ list уже существуют в вашей базе данных, и вам нужны объекты модели, то get _ or _ create - это определенно путь.

Если вы знаете, что предметы НЕ находятся в вашей БД, вам было бы намного лучше сделать:

for item in item_list:
    new = Entry.objects.create(
        field1 = item.field1,
        field2 = item.field2,
    )

И если вам не нужны объекты, то просто проигнорируйте возврат от вызова функции. Это не ускорит работу базы данных, но это поможет с управлением памятью, если это проблема.

Если вы не уверены, что данные уже находятся в БД, но в любом поле установлен флаг unique = True , тогда БД будет обеспечивать уникальность, и вы можете просто поймать исключение и двигаться дальше. Это предотвратит дополнительное попадание в БД, избегая попытки выбора существующего объекта.

from django.db import IntegrityError

for item in item_list:
    try:
        new = Entry.objects.create(
            field1 = item.field1,
            field2 = item.field2,
        )
    except IntegrityError:
        continue

В любом случае можно увеличить скорость, управляя транзакциями вручную. Джанго будет автоматически создавать и совершать транзакцию для каждого сохранения, но предоставляет некоторые декораторы, которые значительно повысят эффективность, если вы знаете, что вы будете делать много БД экономит в конкретной функции. Документы Django лучше объясняют все это, чем я могу здесь, но вы, вероятно, хотите обратить особое внимание на django.db.transaction.commit _ на _ успех

-121--2563295-

Это эквивалентно

for (var group in groupsCounty) {
  ...
}

С добавленной стоимостью доступа к индексу ( i

-1
ответ дан 5 December 2019 в 11:24
поделиться

Он делает это: -

var groups = countrylist.split(',');    
for( var i = 0;  i < groups.length; i++ )
{
  var group = groups[i]
  ...
}

Единственная реальная разница в том, что вышеупомянутое встречается гораздо чаще и его легче распознать. Вы бы не разместили приведенный выше код с вопросом «Что это делает?».

Опубликованный вами код является примером умной разработки, но не обязательно хорошей практики кодирования.

2
ответ дан 5 December 2019 в 11:24
поделиться

Цикл for проходит по массиву groups, пока groupsCounty[++i] не вернет ложное значение.

С использованием следующих терминов:

for (<initial-expression>; <condition>; <final-expression>)

Выражение initial-expression var i = -1, group объявляет переменные i и group. Для каждой итерации циклическое условие group = groupsCounty[++i] присваивает следующее значение массива group. Если это выражение ложно (например, groupsCounty[++i] возвращает undefined при выходе за границы), цикл останавливается. А final-expression пустое, так как i уже увеличено в выражении contition.

1
ответ дан 5 December 2019 в 11:24
поделиться

Это итерация по элементам групп с использованием наличия значения в группе как условия guard. т.е. использование JavaScript Truthiness для контроля количества итераций цикла, потому что guard будет false, когда нет значения, которое может быть присвоено.

2
ответ дан 5 December 2019 в 11:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: