решая математическую задачу по разбиению на страницы JavaScript - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь понять, как подойти к математическим задачам, таким как следующий отрывок, который был продемонстрирован в разделе по нумерации в уроке, которому я следовал.

const renderResults = (arrayOfItems, pageNum = 1, resultsPerPage = 10) => {
  const start = (pageNum - 1) * resultsPerPage;
  const end   = pageNum * resultsPerPage;
  arrayOfItems.splice(start, end).forEach(renderToScreenFunction);
};

В учебном пособии это решение было просто напечатано и не объяснено, что заставило меня задуматься, если бы я не видел решение, я не смог бы думать о нем таким образом.

Я понял цель проблемы и то, как сплайс работает, разбивая массив на части.Но для меня не было очевидным, как получить начальные и конечные значения для использования метода сплайсинга на массиве неопределенной длины.Как я мог думать об этом, чтобы решить эту проблему?

Пожалуйста, поймите, я изучаю программирование в свободное время и, что может показаться простым для большинства, я всегда боялся и борюсь с математикой, и я пишуэтот вопрос в надежде поправиться.

Я был бы очень признателен, если бы кто-нибудь мог объяснить, как можно решить такие проблемы в теории.И какую область математики / программирования я должен изучать, чтобы справиться с такими проблемами.Любые указатели будут огромной помощью.Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Ваша функция содержит ошибку, в методе Splice

  arrayOfItems.splice(start, end).forEach(renderToScreenFunction);

Второй аргумент должен быть длиной для извлечения, а не конечным индексом.Вам не нужно вычислять индекс end, но вместо этого используйте resultsPerPage.

Я переписал код без ошибок, удалив оболочку функции для лучшего понимания и добавив некоторыекомментарии ...

// set the initial variables
const arrayOfItems =['a','b','c','d','e','f','g','h','i','j','k','l','m'];
const pageNum = 2;
const resultsPerPage = 5;

// calculate start index
const start = (pageNum - 1) * resultsPerPage; // (2-1)*5=5

// generate a new array with elements from arrayOfItems from index 5 to 10
const itemsToShow = arrayOfItems.splice(start, resultsPerPage) ; 

// done! output the results iterating the resulting array
itemsToShow.forEach( x=> console.log(x) )

Объяснение кода:

  • Устанавливает начальные параметры
  • Рассчитать start index массива, соответствующего страницеты пытаешься получить.((pageNum - 1) * resultsPerPage)
  • Создает новый массив, извлекающий resultsPerPage элементов из arrayOfItems, начиная с индекса start (пустой массив возвращается, если страница не существует)
  • Повторяет сгенерированный массив (itemsToShow) для вывода результатов.

Лучший способ понять код, иногда пытаться запустить его и наблюдать за поведением и результатами.

0 голосов
/ 16 сентября 2018

ОК, так что вы начинаете с

  • списка отображаемых вещей, ну, ну, он такой же, как и он.
  • номер страницы, такойчто первая страница - это страница 1
  • размер страницы (количество элементов на странице)

Чтобы узнать, какие элементы в списке следует отобразить, необходимо подумать о том, чтономер страницы и размер страницы говорят о том, сколько элементов вы должны пропустить .Если вы находитесь на странице 1, вам не нужно пропускать какие-либо элементы.Что, если вы находитесь на странице 5?

Ну, первая страница ничего не пропускает.На второй странице нужно будет пропустить количество элементов на странице.На третьей странице придется пропустить дважды количество элементов на странице и т. Д.Мы можем обобщить это и увидеть, что для страницы p вам нужно пропустить p - 1 количество элементов на странице.Таким образом, для страницы 5 вам нужно пропустить 4-кратное количество элементов на странице.

Показать эту страницу после пропуска по предыдущим страницам легко: просто показать следующие элементы на страницу.

Обратите внимание, что есть две детали, которые вы не указали в коде, который вы разместили.Вот эти данные:

  1. Что, если фактическая длина списка не делится равномерно на размер страницы?
  2. Что делать, если запрашивается страница, значительно превышающая фактическую длину списка?

Для первой детали вам просто нужно проверить эту ситуацию после того, как вы выяснили, как далеко идти вперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...