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

无需显式循环:基于另一嵌套数组过滤嵌套数组

嵌套数组按ID匹配日期过滤方案

这里提供一个清晰的实现思路,核心是先建立日期映射表,再对目标数组进行过滤:

// 第一步:把array1的日期按ID整理成映射表(用Set提升查找效率)
const dateMap = array1.reduce((result, current) => {
  const validDates = new Set(current.nights.map(night => night.date));
  result[current.id] = validDates;
  return result;
}, {});

// 第二步:过滤array2,只保留匹配的日期
const filteredArray2 = array2.map(item => {
  const allowedDates = dateMap[item.id];
  const filteredDays = item.days.filter(day => allowedDates.has(day.date));
  // 返回新对象,不修改原数组数据
  return { ...item, days: filteredDays };
});

步骤拆解

  • 建立日期映射表:用reduce遍历array1,把每个ID对应的所有有效日期存到Set里。用Set而不是普通数组,是因为判断某个日期是否存在时,Set.has()的速度比数组includes()快很多,数据量大的时候差异更明显。
  • 过滤目标数组:用map遍历array2的每一项,对每一项的days数组用filter筛选,只保留日期在对应ID的允许集合里的条目。用{ ...item, days: filteredDays }创建新对象,避免直接修改原数组的元素,这是JS里保持数据不可变性的常用做法,能减少意外的副作用。

验证结果

运行后得到的filteredArray2就会和你期望的结构完全一致:id为1的元素里只会保留2022-07-24和2022-07-26这两个日期的days项,id为2的元素因为所有日期都匹配,所以保留全部days。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:24:31