如何遍历字典数组提取各子数组末尾元素并按timeStamp排序
实现方案
核心逻辑拆分
- 第一步:遍历外层总数组,对每个内层子数组执行末位元素提取,将所有提取结果汇总为临时数组
- 提取时建议增加判空校验,遇到空的子数组直接过滤,避免运行时报错
- 第二步:对临时数组内的元素,读取其嵌套结构中的
timeStamp字段值,按数值大小完成排序- 你提供的
timeStamp是毫秒级时间戳,本身就是可直接比较的数值类型,不需要做格式转换就能对应真实时间先后关系
- 你提供的
注意:你贴出的原始数据写法语类 Swift/Objective-C 字面量,并非标准JSON结构,解析为可用程序对象后,每个数组元素均为「消息ID为键、消息详情为值」的字典结构,和示例代码的结构一致。
可直接参考的JavaScript实现示例
// 修正键值对语法后的原始数据 const rawData = [ [ { "-MXpvzmZdbqzrjND8w9F": { lid: "-MW6eEidZFCLeeZ0uBk1", message: "hi", timeStamp: 1617960107264, title: "Sambhar Dosa", user: "1QSU0c1q8QNrZzmICXGClC0o86E3" } }, { "-MXq5NAyrkk4ZcvRFM7T": { lid: "-MW6eEidZFCLeeZ0uBk1", message: "how ru?", timeStamp: 1617962828647, title: "Sambhar Dosa", user: "1QSU0c1q8QNrZzmICXGClC0o86E3" } } ], [ { "-MXqa5-pkC28lY_Q_hpZ": { lid: "-MWwEpHAhIdhN0i5sltB", message: "hi nice cycle", timeStamp: 1617971142820, title: "Cycle for kids", user: "1QSU0c1q8QNrZzmICXGClC0o86E3" } } ] ]; // 1. 提取每个非空子数组的最后一个元素 const lastElements = rawData .filter(subArr => subArr.length > 0) .map(subArr => subArr[subArr.length - 1]); // 2. 按timeStamp升序排序 const sortedResult = lastElements.sort((a, b) => { // 取出单个元素内嵌套的消息详情中的timeStamp值 const timeA = Object.values(a)[0].timeStamp; const timeB = Object.values(b)[0].timeStamp; return timeA - timeB; });
- 如果使用Swift开发,仅需要将取末位元素的逻辑替换为
subArr.last,排序时直接读取对应字典的timeStamp值做比较即可,核心逻辑完全通用。
内容的提问来源于stack exchange,提问作者saranya
相关产品推荐
相关产品推荐

