Цитата:
Вы можете предложить более лаконичное решение? Осталась у меня одна проблема. После округления до двух знаков после запятой некоторые числа получились целые или с одним знаком после запятой, а хотелось бы иметь, к примеру, 1.70 вместо 1.7 |
AlexHutor,
var arr = [5.94]; for (var i = 1; i < 88; i++) {arr[i] = arr[i-1]*1.059526} |
Цитата:
|
Цитата:
спасибо большое! С округлением тоже всё нормально, действительно невнимательно читал. |
Цитата:
var arr = new Array (88); var result = arr.reduce(function(prev, next) { next = (prev * 1.059526); arr.push(next); }, 5.94); alert(arr); Рони, помогите, пожалуйста, разобраться. 1. arr - создали пустой массив с длиной 88 2. В конце функции задали первое число в массиве (5.94) 3. Начали обрабатывать массив: каждое последующее число - это произведение предыдушего числа на 1.059526 4. Вычислили следующее число (next), добавили его в исходный массив -arr.push(next) 5. Вывели alert'ом получившийся массив arr - не получилось. |
Alexander Belov,
где return??? но и он бесполезен так как Цитата:
нужен пункт 1 сначала выполнить сделать не пустой массив |
рони,
var arr = new Array (88); arr.push(5.94); var result = arr.reduce(function(prev, next) { next = (prev * 1.059526); arr.push(next); return arr; }, 5.94); alert(arr); Отредактировал предыдущий вариант. Срабатвает непонятно как-то. Судя по статье вот тут, ожидаемо было увидеть в массиве изначально в качестве первой цифры 5.94, т.к. мы её добавили в конце (таблица и код сразу над секцией Examples в статье) |
Alexander Belov,
<script> var arr = new Array (88+1).join(" ").split(""); arr.reduce(function(prev, next, i) { arr[i] = prev.toFixed(2); return prev *= 1.059526 }, 5.94); document.write(arr.join("<br>")); </script> |
рони,
Благодарю! Но появились новые вопросы: 1. Почему при создании мы задаём длину 88+1, а в итоге получаем всё равно 88. Потому что функция возвращает всегда предыдущий элемент массива и чтобы вернуть 88, нужно обработать данные 89 раз? 2. join() и split() методы по умолчанию срабатывают на каждый элемент массива. С join() понятно, но почему если убрать split(), не выводится сплошная строка (не разделённая)? Ничего не выводится в принципе без этого метода. |
Alexander Belov,
join заполняет промежутки между элементами, промежутков меньше на 1 чем элементов, элементы нам ненужны, их всёравно нет, поэтому увеличиваем число элементов на 1 , превратили массив из 89 несуществующих элементов в строку из 88 настоящих пробелов, с помощью split() разбили строку получили массив длиной 88. Цитата:
<script> var arr = new Array (88+1).join(" "); document.write("|" + arr + "|<br>"); //строка из 88 обычных пробелов arr = new Array (88+1).join("\u2007"); document.write("|" + arr + "|"); //строка из 88 пробелов размером с букву </script> |
Часовой пояс GMT +3, время: 18:28. |