JSFiddle - React, Tailwind, and code Playground

JavaScript

var obj = {
    nested: {
        nested: {
            nonNested: '1'
        },
        nonNested: '2'       
    },
    nonNested: '3'
};

var obj2 = {
    nested: {
        nested: {
            nonNested: '1'
        },
        nonNested: '2'       
    },
    nonNested: '3'
};

function modifyObj(obj, field, val) {
    var str = 'obj.' + field + '=' + val;
    eval(str);
}

modifyObj(obj, 'nested.nonNested', 99);
console.log(obj);

function modifyObj2(obj, field, val) {
    //if we are modifying a nested val
    if (/\./g.test(field)) {
        var arr = field.split('.'),
            temp = obj;
        //we want temp to be equal to the nested object holding the nested field to be modified and changing this will modify the passed in object
        for (var i = 0; i < arr.length - 1; i++) {
            temp = temp[arr[i]];
        }
        temp[arr.length - 1] = val;
    } 
    //if we are modifying a non-nested val
    else {
        obj[field] = val;
    };
}

modifyObj2(obj2, 'nested.nonNested', 99);
console.log(obj2);