将数组展平为2D

时间:2017-12-05 18:43:28

标签: javascript jquery arrays

我知道在这个问题上有几个答案,但是当我试图制作自己的答案时,我对递归函数的工作方式感到很遗憾,这就是我尝试过的事情:



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;
&#13;
&#13;

我希望结果是2D数组,我的逻辑中缺少什么?

1 个答案:

答案 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; }