如何修改对象最深层数据值?

1,156 阅读1分钟

小白鸡报道,最近跟同事讨论功能时,突然提到这个问题。然后大致实现了下。

话不多说,直接上代码

let a = {
    b: {
        c: {
            d: {
                e: {
                    f: {
                        k: {
                            s: 6
                        }
                    }
                }
            },
            h: {

                l: 5

            },
            m: 3
        },
        n: {
            o: 3
        },
        p: 2
    },
    q: 1,
    x: {
        o: 3
    },
}
/**
 * 改变对象最深层数据值
 */
let max_index = 1;
function set(obj, max, objx, keyx) {
    if (Object.prototype.toString.call(obj) !== '[object Object]') {
        // 取出最大层不为标记值的数据
        if (max_index <= max && keyx !== "$_key") {
            // 取出最大层数
            max_index = max;
        }
    } else {
        // 当前层数加1
        max++;
        // 定义属性标记当前层数
        obj.$_key = max;
        for (const key in obj) {
            // 递归
            set(obj[key], max, obj, key);
        }
    }
}

function setVal(obj, val, pre_obj, pre_key) {
    // 改变最深层键值不是标记值的数据值
    if (pre_obj && pre_obj["$_key"] == max_index && pre_key != "$_key") {
        pre_obj[pre_key] = val;
    }
    else {
        for (const key in obj) {
            setVal(obj[key], val, obj, key);
        }
    }
}

新手上路,希望大家多指教