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

JavaScript递归识别嵌套对象最后一个文本元素并追加内容

实现方案

核心思路

我们要找的是整个嵌套结构里顺序最靠后的text节点,因此直接从最外层的content数组倒序遍历,每次优先检查当前元素的最后一项,找到目标就立即终止遍历,不用遍历全量结构,性能更高:

  • 如果当前项有text属性,说明它就是要找的末尾节点,直接修改文本后终止递归即可
  • 如果当前项有content属性,就递归进入该content继续查找,找到目标直接返回终止,不需要再检查前面的元素

实现代码

function appendFlagToLastText(obj) {
    // 递归查找函数,返回true表示已找到目标,终止后续遍历
    function findLast(node) {
        // 处理content数组的情况,从最后一项倒序检查
        if (Array.isArray(node.content)) {
            for (let i = node.content.length - 1; i >= 0; i--) {
                const child = node.content[i];
                // 当前子项有text属性,直接修改返回
                if (child.text !== undefined) {
                    child.text += ' - last item';
                    return true;
                }
                // 当前子项有content属性,递归查找
                if (child.content !== undefined) {
                    const found = findLast(child);
                    if (found) return true;
                }
            }
        }
        // 单个节点直接带text属性的边界情况处理
        if (node.text !== undefined) {
            node.text += ' - last item';
            return true;
        }
        return false;
    }
    findLast(obj);
    return obj;
}

测试验证

示例1测试

const obj1 = {
    content: [
        { text: "paragraph 1" },
        { 
            content: [
                { text: "paragraph 2" },
            ]
        },
        { text: "paragraph 3" },
    ]
};
appendFlagToLastText(obj1);
console.log(obj1.content[2].text); // 输出:paragraph 3 - last item

示例2测试

const obj2 = {
    content: [
        { text: "paragraph 1" },
        { 
            content: [
                { text: "paragraph 2" }
            ]
        },
        { text: "paragraph 3" },
        { 
            content: [
                { text: "paragraph 4" },
                { 
                    content: [
                        { text: "paragraph 5" }
                    ]
                }
            ]
        }
    ]
};
appendFlagToLastText(obj2);
console.log(obj2.content[3].content[1].content[0].text); // 输出:paragraph 5 - last item

说明

  • 代码默认直接修改原对象,如果需要保留原对象,可在递归前先对入参做深拷贝处理
  • 支持任意层数的content嵌套,不受嵌套深度限制
  • 仅最末尾的1个text节点会被追加标记,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:01