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

ES6下如何过滤含嵌套对象数组的对象数组并按data1排序?

处理嵌套对象数组的过滤与排序方案

嘿,我来帮你搞定这个嵌套数组的处理需求!针对你给出的myData结构,我们可以通过ES6的数组方法组合轻松实现目标,步骤拆解如下:

步骤1:提取所有嵌套的historicalData项

首先,我们需要把外层数组每个对象里的historicalData数组"打平",得到一个包含所有历史数据项的一维数组。这里用Array.flatMap()方法最合适,它会先映射每个元素,再将结果扁平化为新数组。

步骤2:过滤出data2 > 2的项

拿到一维数组后,用Array.filter()筛选出data2大于2的元素。

步骤3:按data1排序

最后用Array.sort()对过滤后的数组按data1排序。如果data1是字符串,直接用localeCompare比较即可;如果是数值类型,调整排序逻辑就行。

完整代码示例

const myData = [
  { name: "", lastName: "", historicalData: [{ data1: 'b', data2: 0 }, { data1: 'a', data2: 30 }] },
  { name: "", lastName: "", historicalData: [{ data1: 'c', data2: 6 }, { data1: 'd', data2: 1 }] }
];

// 完整处理流程
const result = myData
  // 打平嵌套的historicalData数组
  .flatMap(item => item.historicalData)
  // 过滤出data2大于2的项
  .filter(dataItem => dataItem.data2 > 2)
  // 按data1字符串升序排序
  .sort((a, b) => a.data1.localeCompare(b.data1));

console.log(result);
// 输出结果:[{data1: 'a', data2: 30}, {data1: 'c', data2: 6}]

额外实用说明

  • 如果你希望保留外层对象的name、lastName信息,而不是只提取历史数据项,可以调整flatMap的逻辑,把外层属性和历史数据项合并:
.flatMap(item => item.historicalData.map(data => ({ ...item, ...data })))

这样过滤后的结果会同时包含每个历史数据对应的外层对象属性。

  • 如果data1是数值类型,排序逻辑改成(a, b) => a.data1 - b.data1即可实现升序,降序则写成(a, b) => b.data1 - a.data1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:35:38