Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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,功能_Obj(arr){ if(arr.filter)(cur=>{ 返回(cur instanceof数组) }).length==0){ return _assign(arr);//这里我尝试返回结果 }否则{ _Obj(Array.prototype.concat.apply([],arr)); } 功能分配(e){ var r={}; e、 forEach((cur、index、arr)=>{ 如果(索引%2==0 | |索引===0)r[cur]=arr[index+1]; }); c

功能_Obj(arr){
if(arr.filter)(cur=>{
返回(cur instanceof数组)
}).length==0){
return _assign(arr);//这里我尝试返回结果
}否则{
_Obj(Array.prototype.concat.apply([],arr));
}
功能分配(e){
var r={};
e、 forEach((cur、index、arr)=>{
如果(索引%2==0 | |索引===0)r[cur]=arr[index+1];
});
console.log(r)//这是结果,应该返回
返回r;//结果
}
}
风险值数据=[
[
['firstName','Joe'],
['lastName','Blow'],
[‘年龄’,42],
[‘角色’、‘职员’]
]
];

console.log(_Obj(数据))当前流程如下所示:

_Obj [
    return _Obj [
       return _assign
    ]
]
  • \u Obj
    被调用
  • \u Obj
    调用自身
  • \u Obj
    调用\u分配
  • \u assign
    返回值
  • \u Obj
    返回
    \u assign
  • \u Obj
    不返回由
    \u Obj
    返回的值(此处的值丢失)
  • 因此,您也应该在那里添加一个返回

    例如:

    功能_Obj(arr){
    中频(arr.filter)(功能(cur){
    返回(cur instanceof数组)
    }).length==0){
    返回分配(arr);
    }否则{
    return _Obj(Array.prototype.concat.apply([],arr));//也必须在此处返回
    }
    功能分配(e){
    var r={};
    e、 forEach(函数(cur、index、arr){
    如果(索引%2==0 | |索引===0)r[cur]=arr[index+1];
    });
    返回r;
    }
    }
    风险值数据=[
    [
    ['firstName','Joe'],
    ['lastName','Blow'],
    [‘年龄’,42],
    [‘角色’、‘职员’]
    ]
    ];
    
    console.log(_Obj(数据))当前流程如下所示:

    _Obj [
        return _Obj [
           return _assign
        ]
    ]
    
  • \u Obj
    被调用
  • \u Obj
    调用自身
  • \u Obj
    调用\u分配
  • \u assign
    返回值
  • \u Obj
    返回
    \u assign
  • \u Obj
    不返回由
    \u Obj
    返回的值(此处的值丢失)
  • 因此,您也应该在那里添加一个返回

    例如:

    功能_Obj(arr){
    中频(arr.filter)(功能(cur){
    返回(cur instanceof数组)
    }).length==0){
    返回分配(arr);
    }否则{
    return _Obj(Array.prototype.concat.apply([],arr));//也必须在此处返回
    }
    功能分配(e){
    var r={};
    e、 forEach(函数(cur、index、arr){
    如果(索引%2==0 | |索引===0)r[cur]=arr[index+1];
    });
    返回r;
    }
    }
    风险值数据=[
    [
    ['firstName','Joe'],
    ['lastName','Blow'],
    [‘年龄’,42],
    [‘角色’、‘职员’]
    ]
    ];
    console.log(_Obj(数据))的答案几乎涵盖了代码失败的主要原因

    简单地说,如果不返回递归函数每次迭代中得到的中间值,这些值就会丢失

    以下伪代码类似于给定示例中递归函数的工作方式,应该有助于澄清问题发生的原因:

    _Obj [
        _Obj [
           return _assign
        ]
    ]
    
    在上面的例子中,函数
    \u Obj
    调用
    \u Obj
    ,后者反过来调用函数
    \u assign
    。由于返回了
    \u assign
    的值,因此内部
    \u Obj
    的值现在等于该值。但是,外部对象的值是未定义的,因为内部对象没有返回任何内容

    为了使
    \u Obj
    按预期工作,伪代码应如下所示:

    _Obj [
        return _Obj [
           return _assign
        ]
    ]
    
    现在,由于返回了内部
    \u Obj
    的值,因此记录到控制台的最终值是
    \u assign
    的值

    下面,我提供了一个更清晰、更清晰的正确代码版本

    片段:

    函数分配(数组){
    /*创建一个对象*/
    var对象={};
    /*迭代数组中的每个元素*/
    forEach(函数(元素、索引){
    /*检查索引是否为偶数*/
    如果(索引%2==0)对象[元素]=数组[索引+1];
    });
    /*返回对象*/
    返回对象;
    }
    函数_Obj(数组){
    /*过滤数组*/
    var filtered=array.filter(当前=>数组的当前实例);
    /*调用_assign或_Obj并返回其值*/
    返回(filtered.length==0)?\u赋值(数组):\u对象([].concat.apply([],数组));
    }
    /*例如*/
    控制台日志(_Obj([
    [
    ['firstName','Joe'],
    ['lastName','Blow'],
    [‘年龄’,42],
    [‘角色’、‘职员’]
    ]
    ]));的答案几乎涵盖了代码失败的主要原因

    简单地说,如果不返回递归函数每次迭代中得到的中间值,这些值就会丢失

    以下伪代码类似于给定示例中递归函数的工作方式,应该有助于澄清问题发生的原因:

    _Obj [
        _Obj [
           return _assign
        ]
    ]
    
    在上面的例子中,函数
    \u Obj
    调用
    \u Obj
    ,后者反过来调用函数
    \u assign
    。由于返回了
    \u assign
    的值,因此内部
    \u Obj
    的值现在等于该值。但是,外部对象的值是未定义的,因为内部对象没有返回任何内容

    为了使
    \u Obj
    按预期工作,伪代码应如下所示:

    _Obj [
        return _Obj [
           return _assign
        ]
    ]
    
    现在,由于返回了内部
    \u Obj
    的值,因此记录到控制台的最终值是
    \u assign
    的值

    下面,我提供了一个更清晰、更清晰的正确代码版本

    片段:

    函数分配(数组){
    /*创建一个对象*/
    var对象={};
    /*迭代数组中的每个元素*/
    forEach(函数(元素、索引){
    /*检查索引是否为偶数*/
    如果(索引%2==0)对象[元素]=数组[索引+1];
    });
    /*返回