Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从道具链调用获取对象值_Javascript - Fatal编程技术网

Javascript 从道具链调用获取对象值

Javascript 从道具链调用获取对象值,javascript,Javascript,假设我有一个对象 const obj = { key1:{ key2:{ val:'value' } } } 我还有一个函数可以将路径返回到正确的值: func(obj,'value') //returns a string ['key1']['key2']['val'] 我想通过这样的调用获得“值”: obj`${func(obj,'value')}` 应该是这样的 obj.key1.key2.val 但是我犯了一个错误 这种方法的复杂性在于通过使用re

假设我有一个对象

const obj = {
key1:{
    key2:{
        val:'value'
    }
}
}

我还有一个函数可以将路径返回到正确的值:

func(obj,'value') //returns  a string ['key1']['key2']['val']
我想通过这样的调用获得“值”:

obj`${func(obj,'value')}`
应该是这样的

obj.key1.key2.val

但是我犯了一个错误

这种方法的复杂性在于通过使用
reduce()
通过迭代键数组返回值来保存树结构,从而在数组中推送“值”

const obj={key1:{key2:{val:'theretrieved value'}}
//不带eval()
常量键串=“['key1']['key2']['val']”;
//使用正则表达式返回键数组
常量keyReg=/\['(.+?)'\]/g;
常量keyArr=[…keyString.matchAll(keyReg)].map(match=>match[1]);
//将obj作为初始累加器传递并迭代检索嵌套值
const retrievedValue=keyArr.reduce((a,key)=>(a=a[key],a),obj);

console.log(retrievedValue)没有任何内置的方法可以按照您所描述的方式实现这一点。看一看。如果我理解正确,在这条语句中,
func(obj,'value')
value
是深度嵌套对象中的一个键,它应该返回它的值。对的