SOURCE

let init = {
    person: {
        name: {
            x1: {
                x2: {
                    x3: 'xxxxxx3'
                }
            }
        }
    }
}
let expr = 'person.name.x1.x2.x3'
let res = expr.split(".");
/** 回调函数
 * previousValue: 上一次回调返回的值
 * currentValue: 数组中当前被处理的元素
 * index: 当前元素在数组中的索引
 * array: 调用reduce方法的数组
 * **/
 //第三个参数: init 作为第一次调用 callback 的第一个参数

let a = res.reduce((previousValue, currentValue, index, array) => {
    console.log('上一次回调返回的值: ', previousValue);
    console.log('数组中当前被处理的元素: ', currentValue);
    console.log('当前元素在数组中的索引: ', index);
    console.log('调用reduce方法的数组: ', array);
    console.log('******************************************************************');
    return previousValue[currentValue]
}, init);
console.info(a);
console 命令行工具 X clear

                    
>
console