Javascript-理解递归内部函数[已解决]

Javascript-理解递归内部函数[已解决],javascript,json,recursion,Javascript,Json,Recursion,以下代码打印对象中按其值搜索的键的路径: 函数findKeyPath(obj、keyAttr、keyValue){ 让路径=”; (函数findKey(对象、键属性、键值、键路径){ 常量prevPath=`${keyPath?keyPath+“:”}`; if(obj[keyAttr]==keyValue){ 路径=`${prevPath}${keyAttr}`; }else if(typeof obj==“object”&&JSON.stringify(obj)==JSON.stringi

以下代码打印对象中按其值搜索的键的路径:

函数findKeyPath(obj、keyAttr、keyValue){
让路径=”;
(函数findKey(对象、键属性、键值、键路径){
常量prevPath=`${keyPath?keyPath+“:”}`;
if(obj[keyAttr]==keyValue){
路径=`${prevPath}${keyAttr}`;
}else if(typeof obj==“object”&&JSON.stringify(obj)==JSON.stringify(keyValue)){
path=prevPath.slice(0,-1);//删除最后一个点
}
if(对象的类型==“对象”&&!Array.isArray(对象)){
用于(obj中的常量键){
if(Array.isArray(obj[key])){
for(设j=0;j);我能想到的第二个代码片段的一个问题是,
path
作为一个变量,在整个
findKey
函数调用中不断更新,它是一种“受保护变量”,findKey
函数可以访问和修改它。在第二个代码段中,我们不是修改变量,而是直接将其返回给调用者,这可能不会为这部分代码返回任何内容

if (typeof obj === "object" && !Array.isArray(obj)) {
for (const key in obj) {

  if (Array.isArray(obj[key])) {
    for (let j = 0; j < obj[key].length; j++) {

      findKey(obj[key][j], keyAttr, keyValue, `${prevPath}${key}[${j}]`);
    }
  }
  if (obj[key] !== null && typeof obj[key] === "object") {

    findKey(obj[key], keyAttr, keyValue, `${prevPath}${key}`);
  }
}
if(object的类型==“object”&&!Array.isArray(obj)){
用于(obj中的常量键){
if(Array.isArray(obj[key])){
for(设j=0;j
想象一下,
findKey
在这里被调用并按照您的期望返回内容,但是我们没有从这个函数返回任何内容,因此,
未定义的
被返回。我们可能需要引入一个变量并存储结果,然后为这部分代码返回它