我有以下代码用于将多维数组压平
var x = [[[2, 3], 4], 5, [6, 7]];
function flatten(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i].constructor === Array) {
subArr = arr[i];
// Shift the array down based on the space needed for the sub array
for (var j = arr.length + subArr.length - 2; j > i + subArr.length - 1; j--) {
arr[j] = arr[j - subArr.length + 1];
}
// Insert sub array elements where they belong
for (var k = 0; k < subArr.length; k++) {
arr[i + k] = subArr[k];
}
// Look at arr[i] again in case the first element in the subarray was another array;
i--;
}
}
}
flatten(x);
JSBin在这里:http://jsbin.com/gazagemabe/edit?js,console
我想使用递归来完成这个操作,但我卡住了。我试图不使用临时数组来完成它,但是事情似乎变得混乱了。我觉得我错过了一些递归的核心原则。
我意识到我需要一个基本情况。我能想到的唯一情况是当flatten中的当前数组没有子数组时。但是由于我总是通过引用传递数组,所以我没有任何东西可以返回。
我的伪代码是
function flatten(arr)
loop through arr
if arr[index] is an array
increase the array length arr[index] length
flatten(arr[index])
else
// unsure what to do here to modify the original array