arrays - 按时间戳对 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,并且按时间顺序为具有最新时间戳的对象获取时间戳
解决方案
用于.reduce
查找最新的:
let {id, timestamp} = JSON.parse(row).reduce(
(a,c) => a.timestamp > c.timestamp ? a : c //lexigographic enough for iso8601
)
推荐阅读
- sitemap - 谷歌链接显示站点地图并生成 404 错误我无法解释
- postgresql - 在带有 Sequelize 的 Where 语句中使用包含的模型
- python - Python返回一个var本身
- nginx - 一个变量上的 nginx 多个映射条件
- laravel - Laravel Eloquent 多选
- kubernetes - 将容器作为 CronJob 部署到 (Google) Kubernetes Engine - 完成任务后如何停止 Pod
- sql - T-SQL:存储过程中的更新语句
- java - 找到最长的重复序列
- powershell - 如何使 powershell 替换命令更易于理解
- javascript - 如何获取选定对象的索引?