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];
});
/*返回