正在寻找一种更干净的方法在JavaScript中实现此分页功能

正在寻找一种更干净的方法在JavaScript中实现此分页功能,javascript,Javascript,我想写一个方法,它接受偏移量和限制以及传入的对象数组。对象始终具有id列。我想返回一个新数组,其结果基于偏移量和限制。下面是一个例子,后面是我不满意的实现(太多的fences和fencepost类变量总是容易出错)。此外,如果limit==-1,则取其余部分 也许有更好的方法来做切片?你能帮忙吗 const baseArray = [{name: 'peter'},{name: 'terry'},{name: 'tammy'},{name: 'mary'}]; const offset = 1;

我想写一个方法,它接受偏移量和限制以及传入的对象数组。对象始终具有id列。我想返回一个新数组,其结果基于偏移量和限制。下面是一个例子,后面是我不满意的实现(太多的fences和fencepost类变量总是容易出错)。此外,如果limit==-1,则取其余部分

也许有更好的方法来做切片?你能帮忙吗

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 && (offset + limit > index || limit == -1);
    })
    .map((rec) => {
      rec.cursor = Buffer.from(rec.name.toString()).toString("base64");
      return rec;
    });

好的,
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);
函数getPaginatedData(数组、偏移量、限制){ if(limit<0)返回array.slice(offset); 返回数组.slice(偏移量,偏移量+限制); } 常量基数组=[ {姓名:“彼得”}, {姓名:“特里”}, {姓名:“塔米”}, {姓名:“玛丽”}, ]; 常数偏移=1; 常数极限=2; const speakerArray=getPaginatedData(baseArray、offset、limit);
光标是怎么回事?这里不用于分页。游标是我需要的实现的一部分。我没有将其添加到文章的标题中,但在我的示例(graphql中继类型的东西)中暗示了这一点,这非常清晰。添加光标怎么样?你只需要
map
in(使用副本或在中分配光标),但这与分页不同,不是吗?是的,我确实需要添加光标,但这取决于id。可能应该将其作为一个单独的问题发布,因为它不是分页的一部分“id”是什么在这里您的原始数据没有“id”。已从rec.id更改为rec.name。我的疏忽简化了原来的问题