简单的javascript递归函数返回的值比实际存在的值多
Simple javascript recursive function returns more values than actually exist?
我正在练习递归,并编写了这个函数:
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
。一旦你发现了一个数组,就不要再用它做其他事情了。
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);
另一方面,由于所有数组都是对象,您可以只测试'object'
:
var bigArray = ['a', ['b', ['c', ['d', { a: 'e' }]]]];
var results = [];
function bagger293(bigArray) {
for (var item in bigArray) {
if (typeof bigArray[item] === 'object') {
bagger293(bigArray[item]);
}
else {
results.push(bigArray[item]);
}
}
}
bagger293(bigArray);
console.log(results);
您缺少一个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]);
}
}
}
所有数组都是对象。不需要同时检查Array.isArray
和typeof == 'object'
。
var bigArray = ['a', ['b', ['c', ['d', {a:'e'}]]]];
var results = [];
(function bagger293(bigArray) {
for (var item in bigArray)
if (typeof bigArray[item] === 'object')
bagger293(bigArray[item]);
else
results.push(bigArray[item]);
})(bigArray);
console.log(results);
相关文章:
- 递归函数中断
- 将jQuery对象传递到setTimeout递归函数中
- 对象与递归函数的比较
- 循环内部的递归函数未按预期工作
- 递归函数返回不正确
- 递归函数编程困境
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 返回不会退出 javascript 中的递归函数
- jquery递归函数转换为非递归函数
- AngularJS,promise带有递归函数
- 如何停止此递归函数
- 如何将下面的递归函数转换为纯函数
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- Javascript递归函数引用了这一点
- 如何将这个递归函数转换为迭代函数
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 从javascript中的递归函数获取undefined
- 将递归函数转换为异步 CPS 实现 (javascript)
- 简单的javascript递归函数返回的值比实际存在的值多
- 不存在递归函数