2011-01-12 2 views
2

У меня есть код JavaScript:Возможно ли сократить этот код?

var newPositions = new Array(count); 
       for (var i = 0; i < count; i++) { 
        newPositions[i] = i; 
       } 

Можно ли INIT этот массив от 0 сосчитать более быстро (в одной линии я имею в виду)?
UPD: счетчик представляет собой число, которое может отличаться во время выполнения

UPD2: не думаю об алгоритме, единственный способ, чтобы написать этот код в одной строке. Как @Martin Jespersen предполагают и использование кому-нибудь удаленный ответ:

for (var i = 0, newPositions = []; i < count; newPositions[i] = i++) 
+1

что кажется довольно легким – hunter

+0

Каков счет? В чем его ценность? – fredrik

+0

@ hunter: я переименовал свою тему в соответствие с тем, что я имею в виду) – Kai

ответ

4
for (var i = 0,newPositions=[]; i < count; i++) { 
    newPositions[i] = i; 
} 
1

Нет, это не способ оптимизации, что больше :)

0

Если счетчик всегда известен номер, то синтаксис для создания Javascript массив в 1 линии

var myArray = [0,1,2,3,4,5,6,7]; //assuming count was 8 
0

смарт-задница ответ был бы:

for (var i = 0; i < count; i++) newPositions[i] = i; 

Но лучшим ответом (или вопросом) было бы: почему этот массив полезен для вас вообще? В массиве хранятся значения, которые можно легко вычислить «на лету». С дополнительной информацией мы можем дать вам лучший ответ.

+0

Вам не хватает декларации newPosition, массивы необходимо создать перед использованием. –

+0

После инициализации я перетасовываю его – Kai

+0

Да ... Я понял (думаю, ошибочно), что подмножество исходного кода было бы понятным. Я предполагал, что он знает, что декларация не может быть оптимизирована, если «count» не является постоянным. Цикл является его главной задачей, для которой нет оптимизации, которая может быть применена. Его проблема - его алгоритм, а не его код. – Sparafusile

0

Не намного легче я боюсь, если вы не используете тот же счет, что и в ответе Джамеца.

var newPositions = []; 
while(count-- > 0) 
    newPositions[count] = count; 

Это немного короче, но тот же код, кроме него изменений соиЬ поэтому, возможно, использовать темп уаг fpor, что вместо этого.

+0

вам не нужна часть '> 0', используя обратный цикл, подобный этому. В любом случае, как я уже упоминал, это будет отменено! – jAndy

+0

@jAndy: Что будет отменено? –

1

Это как «легко», поскольку оно позволяет делать то, что вы хотите; единственный потенциал оптимизации превратить инициализацию массива в функцию, например, так:

function range(count) { 
    var countArray = new Array(count); 
    for(var i = 0; i < count; i++) { 
     countArray[i] = i; 
    } 
    return countArray; 
} 

Затем присвоить его переменной:

var newPositions = range(count); 

Только оптимизация, если вам необходимо сделать, что разумное число времени, чтобы учесть дополнительное время, затрачиваемое на кодирование функции. Если это делается один раз, то это примерно так же хорошо, как и будет.

В качестве своего рода кода, который вы инициализируете newPositions от 0 до count-1, а не 0 для подсчета, из-за того, как настроен цикл for. Измените i < count на i <= count в цикле for, если вы хотите включить значение count в свой массив.

Смежные вопросы