我知道在这个问题上有几个答案,但是当我试图制作自己的答案时,我对递归函数的工作方式感到很遗憾,这就是我尝试过的事情:
function flatcoords(arr) {
for (i = 0; i < arr.length; i++) {
const value = arr[i];
if (value.isArray) {
return flatcoords(value);
} else {
return arr;
}
}
}
const arr_test = [
[
[1, 2],
[1, 2]
],
[1, 2],
[1, 2],
[
[
[1, 2],
[1, 2]
]
]
];
//wanted_result = [ [1,2],[1,2],[1,2],[1,2],[1,2],[1,2] ]
console.log(flatcoords(arr_test));
&#13;
我希望结果是2D数组,我的逻辑中缺少什么?
答案 0 :(得分:3)
首先,您需要在使用前声明所有变量。然后,您可以使用Array.isArray
检查项目是否为数组。
在这种情况下,我建议检查checked元素的第一项是否也是一个数组,在这种情况下是平面数组。
结果,一个数组派上用场,因为不仅要返回一个元素,而且还要返回所有元素。虽然数组有更多项,但您需要将所有项追加到现有结果数组中。
function flatcoords(array) {
var result = [],
value,
i;
for (i = 0; i < array.length; i++) {
value = array[i];
if (Array.isArray(value) && Array.isArray(value[0])) {
result = result.concat(flatcoords(value));
} else {
result.push(value);
}
}
return result;
}
const arr_test = [[[1, 2], [1, 2]], [1, 2], [1, 2], [[[1, 2], [1, 2]]]];
console.log(flatcoords(arr_test));
.as-console-wrapper { max-height: 100% !important; top: 0; }