Уж ежели автор использует push...
function reverseArray(array) { let output = []; do { output.push(array.pop()); } while (array.length); return output; } alert(reverseArray([1,2,3,4,5])); PS: лично мне естественней вариант автора, т.к. в задании - Цитата:
|
Цитата:
Цитата:
Меня больше стиль кода интересует, где логику делать в параметрах или внутри. А то когда нить устроишься поработать, а "коллеги" спросят что за колхозный ниндзя код и сломают нос. А мне носик жалко, т.к. он у меня один. |
Цитата:
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([]))); |
Наверное я непонятно спросил, меня решение той задачки не интересует.
Вот другая задачка автора книги: Вызываем функцию 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 =...). А я сделал решение где это внутри функции. Меня этот стиль кодирования интересует. |
Цитата:
|
родной реверс так работает, с обоих сторон фигачит =)
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; } |
Цитата:
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)); Это решение автора? |
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] Спасибо всем за участие в этой непонятной теме. В общем я понял что повторяющиеся вычисления в цикле если возможно выносим в условие, а в параметры функции - это уже понты. |
Nexus,
Да она ничего не возвращает - хоть сумму, хоть диапазон... |
Часовой пояс GMT +3, время: 05:55. |