You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于内部对象数组的left字段对对象数组进行降序排序

解决数组排序及子数组筛选问题

嘿,我来帮你搞定这个需求!从你给出的示例来看,我们需要完成两个核心操作:基于每个外层对象子数组里的最大left值对主数组降序排序,同时把每个外层对象的moreData只保留那个left值最大的元素。下面是具体的实现方案:

完整代码实现

// 你的原始数据
const myData = [
  { name: "", lastName:"", moreData: [{ left: 5, data: '', }, { left: 3, data: '', } ] },
  { name: "", lastName:"", moreData: [{ left: 8, data: '', }, { left: 4, data: '', } ] }
];

// 步骤1:对主数组按「moreData中最大left值」降序排序(不修改原数组)
const sortedByMaxLeft = [...myData].sort((objA, objB) => {
  // 获取当前对象moreData里的所有left值,取最大值
  const getMaxLeft = (obj) => Math.max(...obj.moreData.map(item => item.left));
  // 降序排序:用b的最大值减a的最大值
  return getMaxLeft(objB) - getMaxLeft(objA);
});

// 步骤2:筛选每个对象的moreData,只保留left值最大的元素
const finalResult = sortedByMaxLeft.map(obj => {
  const maxLeft = Math.max(...obj.moreData.map(item => item.left));
  return {
    ...obj, // 复制原对象的所有属性
    moreData: [obj.moreData.find(item => item.left === maxLeft)] // 替换为仅含最大left的子数组
  };
});

console.log(finalResult);

代码说明

  • 不修改原数组:用[...myData]创建原数组的浅拷贝,避免破坏原始数据(如果不需要保留原数组,可以直接用myData.sort())
  • 快速获取最大left值:通过Math.max(...obj.moreData.map(item => item.left))把moreData里的left值提取成数组,再取最大值,简洁高效
  • 降序排序逻辑:sort方法中返回objB的最大left - objA的最大left,就能实现从大到小的排序
  • 子数组筛选:用find找到moreData中left等于最大值的元素,再包裹成数组,和你期望的结果格式一致

边界情况处理(可选)

如果你的数据里可能存在moreData为空数组的情况,可以给最大值加个默认值,避免报错:

const getMaxLeft = (obj) => obj.moreData.length ? Math.max(...obj.moreData.map(item => item.left)) : 0;

内容的提问来源于stack exchange,提问作者JennyJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:13:16