使用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
相关产品推荐
相关产品推荐

