на данный момент я использую этот JavaScript создать массив из n чисел от 0 до n
// javascript populate array
var n=1000;
var arr=[n];
for (i=n;i>=0;i--) {
arr[i]=i;
console.info(arr[i]);
}
это быстрый/правильный способ выполнить задачу?
Вы можете использовать декларативный подход при использовании Array.from
следующим образом:
arr = Array.from({length: 20}, (e, i)=> i)
console.info(arr)
так же быстро, как метод итерации цикла 25 против 15, мс с n = 100000
Способ ES6 сделать это с помощью Array.keys()
:
let n = 10;
let arr = Array.from(Array(n).keys());
console.info(arr);
Сделал быстрый JSPerf с ответом:
https://jsperf.com/array-filling-so/
существует большой разброс значения продолжительности времени от 19 мс до 50 мс. но это просто быстрый метод. (n=1000000);
Вы можете использовать функцию map
, пропуская первый параметр предиката и получая индекс i
.
let arr = Array(10).fill().map((_, i) => i);
console.info(arr);
короткий, но медленный. ~ 35 мс против 15 мс
Самый короткий путь (я так думаю) [...Array(10)].map((a,b)=>b)
console.info(
[...Array(10)].map((a,b)=>b)
)
Если под эффективным вы подразумеваете «наименьшее количество символов», я думаю, что это короче, чем любой из опубликованных ответов:
[...Array(10).keys()]
Такие вещи пригодятся при тестировании с помощью консоли браузера. Однако имейте в виду, что это более чем в два раза медленнее, чем принятый в настоящее время ответ:
Array.from({length:10},(e,i)=>i)
Хотя я не проверял производительность профессионально, я попытался создать массив из 1e8 элементов, используя оба метода, и это заняло около пяти секунд при использовании первого метода и всего две секунды при использовании второго метода (со значительной вариативностью для обоих методов) на моем маленьком ноутбуке. тогда как массив с элементами 1e9 привел к нехватке памяти.
Но для людей, которым нужно регулярно вводить такие вещи в консоль браузера, это может иметь не такое большое значение, как простота запоминания и ввода. Однако обратите внимание, что если вы собираетесь сразу передать результат в .map()
, первый метод будет всего на один символ короче, а производительность будет еще хуже по сравнению с ним, особенно потому, что второй метод не требует отдельного вызова .map()
. Итак, только для отладки или опробования, но, на мой взгляд, полезно.
для n=100000; получил 15 мс.