如何按时间戳与用户名字母序对JSON对象进行排序?
按时间戳+用户名字母顺序排序JSON数组
没问题,我来帮你搞定这个排序需求!要实现同时按时间戳和用户名字母顺序排序,咱们可以直接用JavaScript数组的sort()方法,在排序回调里先处理时间戳的优先级,时间戳相同的时候再比对用户名。
完整实现代码
const obj = [ {"timestamp": 1487184625, "user": "Eric", "action": "navigate"}, {"timestamp": 1487184655, "user": "Bill", "action": "browse"}, {"timestamp": 1487184685, "user": "Eric", "action": "key press"}, {"timestamp": 1487184715, "user": "John", "action": "idle"}, {"timestamp": 1487184755, "user": "Tran", "action": "search"}, {"timestamp": 1487098049, "user": "Tran", "action": "click"} ]; // 核心排序逻辑:先按时间戳升序,时间戳相同则按用户名A-Z排序 const sortedObj = obj.sort((a, b) => { // 第一步:优先比较时间戳 if (a.timestamp !== b.timestamp) { return a.timestamp - b.timestamp; // 改成 b.timestamp - a.timestamp 就是时间戳降序 } // 第二步:时间戳相同时,按用户名字母顺序排序 return a.user.localeCompare(b.user); // 改成 b.user.localeCompare(a.user) 就是用户名降序 }); console.log(sortedObj);
代码逻辑说明
sort()方法的回调函数通过返回值控制排序:返回负数则a排在b前,返回正数则b排在a前,返回0则顺序不变;- 先判断时间戳是否有差异,有差异直接用时间戳的差值实现升序/降序;
- 时间戳相同时,用
localeCompare()比较用户名——这个方法会按照语言环境的标准字母顺序比对字符串,比直接用a.user > b.user更靠谱(能处理带特殊字符的用户名)。
最终排序结果
执行代码后,数组会先按时间戳从早到晚排列,时间戳相同的条目会自动按用户名A-Z排序:
[ {"timestamp":1487098049,"user":"Tran","action":"click"}, {"timestamp":1487184625,"user":"Eric","action":"navigate"}, {"timestamp":1487184655,"user":"Bill","action":"browse"}, {"timestamp":1487184685,"user":"Eric","action":"key press"}, {"timestamp":1487184715,"user":"John","action":"idle"}, {"timestamp":1487184755,"user":"Tran","action":"search"} ]
内容的提问来源于stack exchange,提问作者user7496931
相关产品推荐
相关产品推荐

