如何提取对象及其嵌套子对象中指定key对应的value值?
提取嵌套对象/数组中的value值
我从表单输出中得到一个对象,部分字段是包含value键的嵌套对象或数组,需要提取所有value键对应的内容,同时保留原数据的结构。
原对象
{ inputA: 1354, inputB: "String Value", inputC: [ { value: 1, label: "Value 1" }, { value: 2, label: "Value 2" }, { value: 4, label: "Value 3" } ], inputD: { value: 16, label: "Value 16" }, inputE: { value: 1, label: "Value 1" }, inputF: { subInputA: { value: "String Value", label: "Value of Value" }, subInputB: { value: 1, label: "Value 1" } } }
期望结果
{ inputA: 1354, inputB: "String Value", inputC: [1,2,4], inputD: 16, inputE: 1, inputF: { subInputA: "String Value", subInputB: 1 } }
实现方案
写一个递归函数遍历数据,按以下规则处理:
- 数组:遍历每个元素并递归处理,返回新数组
- 含
value键的对象:直接返回value对应的值 - 普通对象:遍历所有键值对,递归处理值后构建新对象
- 基础类型(数字、字符串等):直接返回
代码实现:
function extractValues(data) { if (Array.isArray(data)) { return data.map(item => extractValues(item)); } if (typeof data === 'object' && data !== null && 'value' in data) { return data.value; } if (typeof data === 'object' && data !== null) { const result = {}; for (const key in data) { if (data.hasOwnProperty(key)) { result[key] = extractValues(data[key]); } } return result; } return data; }
使用方式:
// 传入原对象调用函数 const processedData = extractValues(originalData); console.log(processedData);
内容的提问来源于stack exchange,提问作者qassis
相关产品推荐
相关产品推荐

