首页 > 解决方案 > 如何在javascript中将二维嵌套数组转换为二维单数组

问题描述

我需要在 javascript 中将嵌套数组转换为 2D,有点类似于在链接中为 python 回答的问题

如何将二维嵌套数组转换为二维数组单?

例如,数组

[[[[[[[[
  [16,12],[16,13],[16,14]]
 ],
 [[[[[[
   [46,42],[46,43]
 ]]]]],[
   [62,58],[62,59],[62,60]
 ]]]]]],
  [103,102]],[[118,114],[118,115],[118,116]]
]

需要转换为

[[16,12],[16,13],[16,14],[46,42],[46,43],[62,58],[62,59],[62,60],[103,102],[118,114],[118,115],[118,116]]

请帮忙,提前谢谢

这是我尝试过的,经过多次试验终于奏效了:


function removeNestArray2D(object) {
    var result = [];
    if (Array.isArray(object)) { // check if object is valid array
        for(var i=0; i<object.length; i++) { 
            if(!Array.isArray(object[i])) { // check is each of array element is a valid array
                return object;
            }
            else {
                var tmp = removeNestArray2D(object[i]);

                if(tmp.length == 1) {
                    result = tmp[0];
                }
                else if (tmp.length == 2 && Number.isInteger(tmp[0]) && Number.isInteger(tmp[1])) {
                    result.push(tmp);
                }
                else {
                    for (var j=0; j<tmp.length; j++) {
                        result.push(tmp[j]);
                    }
                }
            }
        }
    }
    return result;
}

标签: javascriptarraysnested

解决方案


递归方法将在这里有所帮助。检查每个数组项是否大小为 2 并且两者都是数字值,然后推送到结果数组,否则继续递归迭代。

const arr = [[[[[[[[
  [16,12],[16,13],[16,14]]
 ],
 [[[[[[
   [46,42],[46,43]
 ]]]]],[
   [62,58],[62,59],[62,60]
 ]]]]]],
  [103,102]],[[118,114],[118,115],[118,116]]
];

const get2dArray = arr => {
  const res = [];
  const pushRecursive = arr => {
    if (arr.length == 2 && arr.every(x => Number.isInteger(x))) {
      res.push(arr);
    } else {
      arr.forEach(pushRecursive);
    }
  };
  pushRecursive(arr);
  return res;
};

console.log(get2dArray(arr));


推荐阅读