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

JavaScript如何从包含照片信息的嵌套对象中提取所有crops元素

实现思路

你需要遍历嵌套的对象结构,聚合所有携带有效rectangle属性的裁剪参数,单用filter方法无法直接完成这类多层嵌套数据的聚合需求,用forEach或者reduce遍历累加更合适。

代码实现(输出对象格式,和你给的示例匹配)

// 原始数据存在photoData变量中
const result = {};

photoData.images.forEach(image => {
  // 跳过没有crops属性的图片项
  if (!image.crops) return;

  // 遍历当前图片的所有裁剪字段
  Object.entries(image.crops).forEach(([cropKey, cropConfig]) => {
    // 只保留有实际裁剪参数的项
    if (cropConfig.rectangle) {
      result[cropKey] = cropConfig.rectangle;
    }
  });
});

输出的result结构如下:

{
  "F08": {
    "left": 690,
    "top": 2111,
    "width": 597,
    "height": 121
  },
  "F10": {
    "left": 653,
    "top": 821,
    "width": 653,
    "height": 243
  },
  "F05": {
    "left": 0,
    "top": 808,
    "width": 624,
    "height": 243
  }
}

可选:输出数组格式

如果需要数组格式的结果,调整代码即可:

const resultArray = [];

photoData.images.forEach(image => {
  if (!image.crops) return;
  Object.entries(image.crops).forEach(([cropKey, cropConfig]) => {
    if (cropConfig.rectangle) {
      resultArray.push({ [cropKey]: cropConfig.rectangle });
    }
  });
});

更简洁的reduce写法

const result = photoData.images.reduce((acc, image) => {
  if (!image.crops) return acc;
  Object.entries(image.crops).forEach(([key, val]) => {
    val.rectangle && (acc[key] = val.rectangle);
  });
  return acc;
}, {});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:05