Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 26.07.2018, 17:43
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 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.
Ответить с цитированием
  #12 (permalink)  
Старый 26.07.2018, 17:52
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от j0hnik
сильно не загоняйтесь, стиль автора это не священный грааль, копировать не надо.
Сообщение от Rise
смотри на MDN for, там много ответов.
У меня хорошее понимание цикла for - вложенные циклы и сложная логика с ними внутри цикла меня не пугают и даже нравится такое решать.

Меня больше стиль кода интересует, где логику делать в параметрах или внутри. А то когда нить устроишься поработать, а "коллеги" спросят что за колхозный ниндзя код и сломают нос. А мне носик жалко, т.к. он у меня один.
Ответить с цитированием
  #13 (permalink)  
Старый 26.07.2018, 18:00
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 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.
Ответить с цитированием
  #14 (permalink)  
Старый 26.07.2018, 18:03
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 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 =...). А я сделал решение где это внутри функции.
Меня этот стиль кодирования интересует.
Ответить с цитированием
  #15 (permalink)  
Старый 26.07.2018, 18:08
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от Rise
ну логики туда много не засовывают, индексы только, обычно это сжиматели делают для минификации кода, вот они туда могут насувать прилично.
Во-во, у меня непонятки, то он понты так лепит или это общепринятый стиль у продвинутых проггеров. Я тоже хочу к продвинутым и готов подражать ихнему стилю если таков есть.
Ответить с цитированием
  #16 (permalink)  
Старый 26.07.2018, 18:09
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 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;
}
Ответить с цитированием
  #17 (permalink)  
Старый 26.07.2018, 18:37
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 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));

Это решение автора?
Ответить с цитированием
  #18 (permalink)  
Старый 26.07.2018, 18:42
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Dilettante_Pro, судя по комментарию функция должна была вообще сумму диапазона возвращать, а не сам диапазон...
Ответить с цитированием
  #19 (permalink)  
Старый 26.07.2018, 18:54
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 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]


Спасибо всем за участие в этой непонятной теме.
В общем я понял что повторяющиеся вычисления в цикле если возможно выносим в условие, а в параметры функции - это уже понты.
Ответить с цитированием
  #20 (permalink)  
Старый 26.07.2018, 18:59
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Nexus,
Да она ничего не возвращает - хоть сумму, хоть диапазон...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конкурс CardioQVARK - разработка алгоритма определения курильщика по кардиограмме ilyad555 Работа 2 10.03.2016 12:51
Решение задачки, нигде не могу найти. Mr_ZET Общие вопросы Javascript 6 10.11.2014 08:13
Не работает скрипт с setTimeout (гляньте опытным глазом) пжл. Benos Firefox/Mozilla 4 24.03.2012 20:18
Решение задачи с объектом math biz87 Общие вопросы Javascript 4 26.08.2011 13:50
Физические задачки на java script scvorec Общие вопросы Javascript 6 22.12.2009 00:31