You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script实现数据倒序、分页与条数限制方案问询

解决方案

修改后的代码

function doGet(e) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet1 = ss.getSheetByName("list_film");
  const sheet2 = ss.getSheetByName("list_review");
  
  // 获取表格表头与数据内容
  const [sheet1Head, ...sheet1Values] = sheet1.getRange("A1:D" + sheet1.getLastRow()).getValues();
  const [sheet2Head, ...sheet2Values] = sheet2.getRange("A1:C" + sheet2.getLastRow()).getValues();
  
  // 转换为ID映射对象,简化关联查询
  const sheet1Obj = sheet1Values
    .map(row => row.reduce((obj, val, idx) => ({ ...obj, [sheet1Head[idx]]: val }), {}))
    .reduce((map, item) => ({ ...map, [item.id]: item }), {});
  
  // 注意:原逻辑中同一影片的多条评论会被覆盖为最后一条,此处保留原逻辑
  const sheet2Obj = sheet2Values
    .map(row => row.reduce((obj, val, idx) => ({ ...obj, [sheet2Head[idx]]: val }), {}))
    .reduce((map, item) => ({ ...map, [item.id_film]: item }), {});
  
  // 关联数据并倒序排列(最新数据在前)
  let res3 = Object.entries(sheet2Obj)
    .map(([k, v]) => ({ ...v, ...(sheet1Obj[k] || {}) }))
    .reverse();
  
  // 处理分页参数
  if (e?.parameter) {
    // 参数转数字并设置默认值
    const page = parseInt(e.parameter.page) || 1;
    const limit = parseInt(e.parameter.limit) || 10;
    
    // 计算分页起始位置
    const startIndex = (page - 1) * limit;
    // 截取对应分页数据(slice不修改原数组,性能更优)
    res3 = res3.slice(startIndex, startIndex + limit);
  }
  
  // 返回JSON格式结果
  return ContentService.createTextOutput(JSON.stringify(res3))
    .setMimeType(ContentService.MimeType.JSON);
}

关键修改说明

  • 倒序排列:关联数据后调用reverse(),让表格最后一行的内容排在返回结果最前端。
  • 分页支持:
    • 从请求参数中读取page(页码,默认1)和limit(每页条数,默认10),自动转换为数字类型。
    • 通过(page - 1) * limit计算分页起始索引,用slice()截取对应范围的数据。
  • 参数容错:对未传入的参数设置默认值,避免因参数缺失引发报错。

可选优化(针对多评论场景)

原代码中若list_review表存在同一影片的多条评论,会被覆盖为最后一条。如果需要保留所有评论,可修改评论数据的存储逻辑:

// 改为存储评论数组的映射对象
const sheet2Obj = sheet2Values
  .map(row => row.reduce((obj, val, idx) => ({ ...obj, [sheet2Head[idx]]: val }), {}))
  .reduce((map, item) => {
    if (!map[item.id_film]) map[item.id_film] = [];
    map[item.id_film].push(item);
    return map;
  }, {});

// 关联数据时展开评论数组
let res3 = Object.entries(sheet2Obj)
  .flatMap(([k, reviews]) => reviews.map(review => ({ ...review, ...(sheet1Obj[k] || {}) })))
  .reverse();

内容的提问来源于stack exchange,提问作者T6VK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:53:19