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

如何从嵌套对象数组中获取Market对象的最小FromDate?

从嵌套对象数组中获取Market的最小FromDate最优解法

核心思路

  • 用**可选链操作符?.**简化嵌套属性的安全访问,替代多层冗余if判断
  • 编写工具函数统一处理单个对象/数组的遍历逻辑,避免重复判断
  • 逐层遍历所有层级的Market对象,收集有效的FromDate
  • 将日期转为Date对象后比较大小,最终输出最小日期的原格式字符串

优化后的完整代码

// 工具函数:将输入转为数组,处理单个对象/空值情况
function toArray(item) {
  if (!item) return [];
  return Array.isArray(item) ? item : [item];
}

// 假设res是你的接口返回数据
const data = res?.Data;
if (!data) {
  console.log('数据源不存在');
  return;
}

const allFromDates = [];

// 遍历所有Product
const products = toArray(data?.Products?.Product);
products.forEach(product => {
  // 遍历当前Product下的所有SubProduct
  const subProducts = toArray(product?.Subproducts?.SubProduct);
  subProducts.forEach(subProduct => {
    // 遍历SubProduct下的所有Region(处理单个/数组情况)
    const regions = toArray(subProduct?.Regions?.Region);
    regions.forEach(region => {
      // 遍历Region下的所有Market
      const markets = toArray(region?.Markets?.Market);
      markets.forEach(market => {
        // 收集有效的FromDate
        if (market?.FromDate) {
          allFromDates.push(new Date(market.FromDate));
        }
      });
    });
  });

  // 遍历当前Product自身的Regions
  const productRegions = toArray(product?.Regions?.Region);
  productRegions.forEach(region => {
    const markets = toArray(region?.Markets?.Market);
    markets.forEach(market => {
      if (market?.FromDate) {
        allFromDates.push(new Date(market.FromDate));
      }
    });
  });
});

// 计算并输出最小FromDate
if (allFromDates.length > 0) {
  const minTimestamp = Math.min(...allFromDates);
  const minDate = new Date(minTimestamp);
  // 转为与原数据一致的格式(去掉毫秒部分)
  const minFromDateStr = minDate.toISOString().slice(0, 19);
  console.log('最小FromDate:', minFromDateStr);
} else {
  console.log('未找到有效的FromDate记录');
}

代码说明

  1. 工具函数toArray:统一处理单个对象、数组、空值的情况,确保后续遍历逻辑一致,无需重复判断Array.isArray或空值
  2. 可选链?.:避免因某个层级属性不存在导致的报错,比如data?.Products?.Product会在data或Products不存在时返回undefined,被toArray转为空数组
  3. 层级遍历:覆盖了数据中所有可能存在Market的层级(Product下的SubProduct、Product自身的Regions)
  4. 日期处理:将字符串转为Date对象后通过时间戳比较大小,最后转回原格式的字符串,保证输出格式与数据源一致

对比初始代码的优势

  • 去掉了多层嵌套的if判断,代码结构更清晰易读
  • 自动处理Region(及其他层级)为单个对象或数组的情况
  • 完整覆盖所有可能的Market节点,不会遗漏数据
  • 加入了无效值过滤,避免空日期或不存在的日期影响结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:17:02