联的小提琴表明,使用递归拉平任何尺寸的阵列(感谢用户BERGI和Exlord他们在第一部分的帮助),并返回一个函数具有最高索引的数组。在我能够得到一些有用的东西之前,我曾经尝试过很多东西。我想澄清一些事情:
- 它是代码的气味,如果你有一个内部函数在一个明确接受参数的闭包内?例如:
- 为什么第二个脚本以最大调用堆栈大小超过错误结束?
-
return {
data: flatten(array),
rank: ranks.sort().reverse()[0]
//smelly code?
}
JS
//working code block
(function() {
function flattenAll(array) {
var ranks = [];
function flatten(array) {
var rank = 0;
var data = [];
$.each(array, function (index, item) {
//recursion here
typeof (item) !== 'object' ? data.push(item) : data = data.concat(flatten(item));
rank++
});
ranks.push(rank);
return data;
};
return {
data: flatten(array),
rank: ranks.sort().reverse()[0]
}
}
console.log(flattenAll([3, 4, [[[[[[4]]]]]], [[1, 4, 5]], [4]]));
})();
/****** second code block******************/
(function() {
function flattenAll(array) {
var ranks = [],
//tried different approach for returning data
//this approach of setting returnData= data
//only grabs the last element in the array
returnData = [];
function flatten() {
var rank = 0;
var data = [];
$.each(array, function (index, item) {
//recursion here
$.isArray(item) ? data = flatten(item) : data.push(item);
rank++
});
ranks.push(rank);
returnData = data;
return data;
};
return {
data: flatten(), //no parens here vs the first code block
rank: ranks.sort().reverse()[0]
}
}
console.log(flattenAll([3, 4, [[[[[[4]]]]]], [[1, 4, 5]], [4]]));
})();
是否有处理倒闭内处理递归有道?我不理解这里发生的一切。
按'排名'你的意思是数组长度? – georg
@ thg435等级是阵列数组的真实数量。因此,一个包含数组的数组的排名为2.包含数组数组的数组的排名为3。 – wootscootinboogie
这是该术语的正确用法,但不是代码的用途。 – georg