首页 > 解决方案 > 按时间戳对 JSON 数组进行排序,提取键/值对并写入谷歌表

问题描述

我正在尝试从 Google 表格中的 JSON 数组中获取信息,并获取数组中的最后一个按时间顺序排列的条目并将其复制到相邻的两个列中

我想要的数据位于工作表的 L 列(从第 2 行开始),格式为:

[{"id": "XX:123456", "timestamp": "2020-01-27T19:25:51.303"}, {"id": "XX:654321", "timestamp": "2020-01-27T19:40:37.06"}]
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("data");
var dataRange = sheet.getDataRange();
var lastRow = dataRange.getLastRow();

function parseData() {

   let parseRange = sheet.getRange(1+1,11,lastRow-1,1); //col L
   let values = parseRange.getValues();
   let out = values.map(([row])=>{
      let {id, timestamp} = JSON.parse(row).pop();
      return [id, timestamp];
   });
   sheet.getRange(1+1, 12, lastRow-1, 2).setValues(out);
}

这是从数组中提取数据,但是由于 JSON 本身没有排序,我需要确保它采用 id,并且按时间顺序为具有最新时间戳的对象获取时间戳

标签: arraysjsongoogle-apps-scriptgoogle-sheets

解决方案


用于.reduce查找最新的:

let {id, timestamp} = JSON.parse(row).reduce(
    (a,c) => a.timestamp > c.timestamp ? a : c //lexigographic enough for iso8601
)

推荐阅读