26.07.2018, 17:43
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Уж ежели автор использует push...
function reverseArray(array) {
let output = [];
do {
output.push(array.pop());
} while (array.length);
return output;
}
alert(reverseArray([1,2,3,4,5]));
PS: лично мне естественней вариант автора, т.к. в задании -
Сообщение от MC-XOBAHCK
|
отдаёт новый массив в котором элементы идут в обратном порядке.
|
- ну и крути массив в обратном порядке.
Последний раз редактировалось Dilettante_Pro, 26.07.2018 в 17:47.
|
|
26.07.2018, 17:52
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Сообщение от j0hnik
|
сильно не загоняйтесь, стиль автора это не священный грааль, копировать не надо.
|
Сообщение от Rise
|
смотри на MDN for, там много ответов.
|
У меня хорошее понимание цикла for - вложенные циклы и сложная логика с ними внутри цикла меня не пугают и даже нравится такое решать.
Меня больше стиль кода интересует, где логику делать в параметрах или внутри. А то когда нить устроишься поработать, а "коллеги" спросят что за колхозный ниндзя код и сломают нос. А мне носик жалко, т.к. он у меня один.
|
|
26.07.2018, 18:00
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Сообщение от Rise
|
не, do здесь не очень, когда массив пустой
|
Ну и что? Пустой - он и в Африке пустой
function reverseArray(array) {
let output = [];
do {
output.push(array.pop());
} while (array.length);
return output;
}
alert(JSON.stringify(reverseArray([])));
Хотя лучше, конечно, так
function reverseArray(array) {
let output = [];
while (array.length) {
output.push(array.pop());
} ;
return output;
}
alert(JSON.stringify(reverseArray([])));
Последний раз редактировалось Dilettante_Pro, 26.07.2018 в 18:03.
|
|
26.07.2018, 18:03
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Наверное я непонятно спросил, меня решение той задачки не интересует.
Вот другая задачка автора книги:
Вызываем функцию
range(21, 54, 2)
она должна вернуть сумму чисел в диапазоне 1 и 2 параметра (21, 54), а третьий параметр - шаг чисел
// Сумма диапазона
function range(start, end, step = start < end ? 1 : -1) {
let array = [];
if (step > 0) {
for (let i = start; i <= end; i += step) array.push(i);
} else {
for (let i = start; i >= end; i += step) array.push(i);
}
return array;
}
Вот у него опять в параметры пошла логика решения задачи (step =...). А я сделал решение где это внутри функции.
Меня этот стиль кодирования интересует.
|
|
26.07.2018, 18:08
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Сообщение от Rise
|
ну логики туда много не засовывают, индексы только, обычно это сжиматели делают для минификации кода, вот они туда могут насувать прилично.
|
Во-во, у меня непонятки, то он понты так лепит или это общепринятый стиль у продвинутых проггеров. Я тоже хочу к продвинутым и готов подражать ихнему стилю если таков есть.
|
|
26.07.2018, 18:09
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
родной реверс так работает, с обоих сторон фигачит =)
2 перестановки за итерацию
function reverse(array) {
var j = array.length - 1;
for (var i = 0; i < j; i++, j--) {
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
|
|
26.07.2018, 18:37
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Сообщение от Rise
|
присвоение в параметре функции
|
И, кстати, не работает.
function range(start, end, step = start < end ? 1 : -1) {
let array = [];
if (step > 0) {
for (let i = start; i <= end; i += step) array.push(i);
} else {
for (let i = start; i >= end; i += step) array.push(i);
}
return array;
}
alert(range(54,21,2));
Это решение автора?
|
|
26.07.2018, 18:42
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
Dilettante_Pro, судя по комментарию функция должна была вообще сумму диапазона возвращать, а не сам диапазон...
|
|
26.07.2018, 18:54
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Сообщение от Dilettante_Pro
|
Это решение автора?
|
Извините, это я напутал - эта функция возвращает только массив чисел в указанном диапазоне с шагом.
Вот полностью решение, там вторая функция (это практические задачки по закреплению пройденного материала):
// Сумма диапазона
function range(start, end, step = start < end ? 1 : -1) {
let array = [];
if (step > 0) {
for (let i = start; i <= end; i += step) array.push(i);
} else {
for (let i = start; i >= end; i += step) array.push(i);
}
return array;
}
function sum(array) {
let total = 0;
for (let value of array) {
total += value;
}
return total;
}
console.log(sum(range(1, 10))); // → 55
console.log(range(5, 2, -1)); // [5, 4, 3, 2]
Спасибо всем за участие в этой непонятной теме.
В общем я понял что повторяющиеся вычисления в цикле если возможно выносим в условие, а в параметры функции - это уже понты.
|
|
26.07.2018, 18:59
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Nexus,
Да она ничего не возвращает - хоть сумму, хоть диапазон...
|
|
|
|