我正在try 通过列出键的数组来查找对象中的参数. 例如,给定一个对象{a:{b:{c:3}}和数组[‘a’,‘b’,‘c’],我正在寻找一个可以递归查看对象的函数,在本例中返回3.通过循环遍历数组并定义子对象,这很容易做到,如下所示:
function keyChain(obj, chain) {
let subObject = obj;
for (let i = 0; i < chain.length; i++) {
if(subObject[chain[i]] !== undefined){
subObject = subObject[chain[i]];
}
}
return subObject;
}
但是,当您try 编辑此参数时会出现问题.有没有什么函数可以保留深度引用,或者允许以其他方式编辑对象内部的值?
我有一个可用来编辑值的工作函数.但是,我正在通过这个函数运行不受信任的用户输入,所以如果有其他更安全的解决方案,那将是更好的.
function applyToKeyChain(obj, chain, value){
let lookUpString = '';
for(let i = 0; i < chain.length; i++){
loopUpString += '[' + chain[i] + ']';
}
eval(`obj${lookUpString} = value;`);
}
我还try 通过getter和setters保留对对象的深度引用,并try 跟踪数组中的每个子对象.在对象中循环到最后一个关键点之前的一个关键点,然后手动查找关键点也不起作用.