Другие люди дают вам хорошие ответы, но я не уверен, что они подчеркивают важный принцип, а именно:
Вы ищете функцию, которая зависит от "порядка"данного числа.Логарифмы, вероятно, самый простой способ получить эту информацию.
База 10 журналов более или менее отвечает на вопрос "На какую наибольшую степень 10 делится это число?"или "Сколько раз я мог бы разделить это число на 10, прежде чем оно станет меньше единицы?"
Вы можете написать функцию, которая отвечает на этот вопрос вручную, конечно:
function divsBy10(n) {
var i = 0;
while(n > 1) {
n = n/10;
i++;
}
return i-1;
}
И издержки не будут высокими.Хотя я бы догадался немного быстрее использовать встроенные математические функции.Конечно, это не похоже на то, как если бы вы получили исходную базу журналов 10 в Actionscript ... похоже, Math.log - это естественный журнал (база журналов e).Есть математическая идентичность, которая говорит log_10 x = log_e x / log_e 10 ... и ActionScript действительно дает вам log_e 10 как константу (Math.LN10).Итак,
function log10(n) {
return Math.log(n)/Math.LN10;
}
Теперь log10 не даст целочисленного ответа на вопросы, которые я упомянул выше («Сколько раз я мог бы разделить n на 10, прежде чем он станет меньше 1?»), Потому что на самом деле этообратное значение 10 ^ n, но неотъемлемая часть возвращаемого значения будет ответом на этот вопрос.Поэтому вам нужно выполнить Math.floor для значения, которое вы получите от него, и оттуда выполнить различные вычисления, которые вам понадобятся, чтобы получить конкретные диапазоны массивов, которые вам нужны.