JavaScript如何批量修改嵌套对象中全层级question的属性名?
实现方案
要处理多层嵌套的children节点,用递归遍历所有节点即可,无需手动写多层循环,即使后续children层级加深也能兼容。
完整实现代码
function processNode(node) { // 浅拷贝当前节点,避免修改原始数据产生副作用 const processedNode = {...node} // 处理当前节点的questions数组 if (Array.isArray(processedNode.questions)) { processedNode.questions = processedNode.questions.map(question => { const { name, ...restProps } = question return { ...restProps, questionName: name } }) } // 递归处理所有子节点 if (Array.isArray(processedNode.children)) { processedNode.children = processedNode.children.map(child => processNode(child)) } return processedNode } // 调用方法处理你的数据 const resultData = processNode(Data)
说明
- 你之前的代码存在两个问题:一是
Data[0]写法错误,你的Data本身是单个对象不是数组,不需要取索引;二是只提取了根层级的questions数组,没有保留原数据的其他属性和children结构。 - 上述实现会完整保留原数据除了
name属性之外的所有结构和字段,仅把所有层级questions数组内的name重命名为questionName。 - 如果你的场景允许修改原始数据,可以去掉浅拷贝步骤,直接修改入参node的属性即可,性能会更高。
内容的提问来源于stack exchange,提问作者brabus
相关产品推荐
相关产品推荐

