聯的小提琴表明,使用遞歸拉平任何尺寸的陣列(感謝用戶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