Ищете более чистый способ сделать эту функцию разбивки на страницы в JavaScript

#javascript

#javascript

Вопрос:

Я хочу написать метод, который принимает смещение и ограничение вместе с переданным массивом объектов. У объектов всегда есть столбец id. Я хочу вернуть новый массив с результатом, основанным на смещении и ограничении. Вот пример, за которым следует моя реализация, которой я не доволен (слишком много заборов и переменных, похожих на заборы, которые всегда подвержены ошибкам). Кроме того, если limit == -1, тогда возьмите остальное.

Может быть, есть лучший способ с помощью slice? Может ли сокращение как-то помочь?

 const baseArray = [{name: 'peter'},{name: 'terry'},{name: 'tammy'},{name: 'mary'}];
const offset = 1;
const limit = 2;
const speakerArray = getPaginatedData(baseArray,offset,limit);

speakerArray is [{name: 'terry',cursor: 'dGVycnk='},{name: 'tammy', cursor: 'dGFtbXk='];
  

где курсор вычисляется с помощью этой строки кода:

 console.log(Buffer.from('terry').toString("base64"));
  

Вот моя реализация, которая мне не нравится.

   const speakerArray = baseArray
    .filter((rec, index) => {
      return index > offset - 1 amp;amp; (offset   limit > index || limit == -1);
    })
    .map((rec) => {
      rec.cursor = Buffer.from(rec.name.toString()).toString("base64");
      return rec;
    });
  

Комментарии:

1. Что это за cursor материал? Здесь он не используется для разбивки на страницы.

2. Курсор является частью нужной мне реализации. Я не добавлял ее в заголовок сообщения, но подразумевал это в своем примере (материал типа реле graphql)

Ответ №1:

Ну, реализация с slice

 function getPaginatedData(array, offset, limit) {
  if(limit < 0) return array.slice(offset);
  return array.slice(offset, offset   limit);
}
const baseArray = [
  { name: "peter" },
  { name: "terry" },
  { name: "tammy" },
  { name: "mary" },
];
const offset = 1;
const limit = 2;
const speakerArray = getPaginatedData(baseArray, offset, limit);
  

Комментарии:

1. Это довольно чисто. Как насчет добавления курсора?

2. Которую вы только map что ввели (либо с копией, либо как вы ее назначили), но это другая операция, чем разбивка на страницы, не так ли?

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

4. Что здесь означает «идентификатор»? Ваши исходные данные в любом случае не имеют «id».

5. Изменено на rec.name от rec.id . Надзор с моей стороны, упрощающий исходную проблему