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

使用Vanilla JavaScript移除嵌套对象的ITEM包装层

解决方案

你可以写一个递归处理函数,专门移除数组或对象中嵌套的ITEM层,同时保留其他结构不变。这个函数会自动遍历嵌套的数组(比如示例里的depts),只剥掉ITEM这一层,不会做全扁平化处理。

核心函数实现

function unwrapItem(data) {
  // 处理数组:遍历每个元素并递归处理
  if (Array.isArray(data)) {
    return data.map(item => unwrapItem(item));
  }
  // 处理对象:检查是否是仅包含ITEM的包裹对象
  if (typeof data === 'object' && data !== null) {
    // 如果对象只有一个属性且是ITEM,直接返回ITEM的值
    if (Object.keys(data).length === 1 && 'ITEM' in data) {
      return unwrapItem(data.ITEM); // 递归处理ITEM内部的内容,避免嵌套的ITEM漏处理
    }
    // 否则遍历对象的每个属性,递归处理属性值
    const result = {};
    for (const key in data) {
      if (data.hasOwnProperty(key)) {
        result[key] = unwrapItem(data[key]);
      }
    }
    return result;
  }
  // 非对象/数组类型直接返回
  return data;
}

使用示例

假设你的原始数据存在rawData变量中,调用函数即可得到处理后的结果:

const rawData = {
  "units": [
    {
      "ITEM": {
        "UnitName": "Unit1",
        "UnitID": 1,
        "depts": [{"ITEM": {"DeptName": "Dept1-1"}}]
      }
    },
    {
      "ITEM": {
        "UnitName": "Unit2",
        "UnitID": 2,
        "depts": [{"ITEM": {"DeptName": "Dept2-1"}}, {"ITEM": {"DeptName": "Dept2-2"}}]
      }
    }
  ]
};

const processedData = unwrapItem(rawData);
console.log(JSON.stringify(processedData, null, 2));

函数说明

  • 递归处理:不管ITEM嵌套多少层(比如如果depts里的对象还有更深的ITEM),函数都会自动剥掉
  • 通用性:除了处理units和depts,其他结构类似的数组/对象都能适用
  • 保留原有结构:只会移除ITEM包裹层,其他属性、数组结构完全保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:27:43