JavaScript如何按嵌套story数组的timestamp对上层对象排序
实现方案
你可以直接在原有逻辑的基础上,新增外层数组的排序逻辑即可,具体实现分两种场景:
场景1:需要保留每个用户内部story数组按时间升序排序的逻辑
原有内部排序逻辑不变,排序外层数组时直接取已排序的story数组最后一位的timestamp作为排序依据即可:
const res = [/* 你的原始数据 */]; // 原有逻辑:每个用户的story内部按timestamp升序排序 res.forEach(val => { val.story.sort((a, b) => a.timestamp - b.timestamp); }); // 新增:外层数组按用户最新story时间降序排序 res.sort((a, b) => { // 空story兜底为0,默认排在最后 const aLatestTime = a.story.length ? a.story.at(-1).timestamp : 0; const bLatestTime = b.story.length ? b.story.at(-1).timestamp : 0; return bLatestTime - aLatestTime; });
提示:如果需要兼容ES2022以下的运行环境,把
a.story.at(-1)替换为a.story[a.story.length - 1]即可。
场景2:不需要修改每个用户内部story数组的顺序
可以直接计算每个用户story数组的最大timestamp作为排序依据,无需提前排序内部数组:
const res = [/* 你的原始数据 */]; res.sort((a, b) => { // 提取单个用户的最新story时间 const getLatestTimestamp = (user) => { if (!user.story.length) return 0; return Math.max(...user.story.map(storyItem => storyItem.timestamp)); }; return getLatestTimestamp(b) - getLatestTimestamp(a); });
以上两种方案运行后,示例中first_name为EEEE的用户都会排在第一位,符合你的排序要求。
内容的提问来源于stack exchange,提问作者simon
相关产品推荐
相关产品推荐

