简单javascript递归函数返回的值比实际存在的值多?
我正在练习递归,并编写了以下函数:简单javascript递归函数返回的值比实际存在的值多?,javascript,function,recursion,Javascript,Function,Recursion,我正在练习递归,并编写了以下函数: var bigArray = ['a', ['b', ['c', ['d', {a:'e'}]]]]; var results = []; function bagger293(bigArray){ for (var item in bigArray){ if (Array.isArray(bigArray[item])){ bagger293(bigArray[item]); } else if (typeof b
var bigArray = ['a', ['b', ['c', ['d', {a:'e'}]]]];
var results = [];
function bagger293(bigArray){
for (var item in bigArray){
if (Array.isArray(bigArray[item])){
bagger293(bigArray[item]);
}
else if (typeof bigArray[item] === 'object'){
bagger293(bigArray[item]);
}else{
results.push(bigArray[item]);
}
}
}
bagger293(bigArray);
console.log(results);
我只想让函数将任何单个值推送到数组中,并在它是对象还是数组时进行更深入的搜索。奇怪的是,我的函数返回如下结果:
['a',
“b”,
"c",,
“d”,
"e",,
“d”,
"e",,
"c",,
“d”,
"e",,
“d”,
"e",,
“b”,
"c",,
“d”,
"e",,
“d”,
"e",,
"c",,
“d”,
"e",,
“d”,
“e”]
我想这是因为我的方式指定
bigArray[item]
但不知道确切原因
预期结果:
['a',b',c',d',e']
您缺少一个else。因为数组也是一个对象,所以代码会启动递归两次
这是有效的:
function bagger293(bigArray){
for (var item in bigArray){
if (Array.isArray(bigArray[item])){
bagger293(bigArray[item]);
}else if (typeof bigArray[item] === 'object'){
bagger293(bigArray[item]);
}else{
results.push(bigArray[item]);
}
}
}
您缺少一个
或。一旦你发现了一个阵列,停止尝试用它做其他事情
var bigArray=['a',['b',['c',['d',{a:'e'}]];
var结果=[];
函数bagger293(bigArray){
for(bigArray中的变量项){
if(Array.isArray(bigArray[item])){
bagger293(大数组[项目]);
}
else if(typeof bigArray[item]=='object'){/所有数组都是对象。无需同时检查Array.isArray
和typeof=='object'
var bigArray=['a',['b',['c',['d',{a:'e'}]];
var结果=[];
(功能bagger293(bigArray){
for(bigArray中的变量项)
if(bigArray[项目]=='object'的类型)
bagger293(大数组[项目]);
其他的
结果:推送(bigArray[项目]);
})(大数组);
console.log(results);
我甚至不认为这在递归上下文中有什么好处。我稍微快了一点。:o