javascript - 如何在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;
}
解决方案
递归方法将在这里有所帮助。检查每个数组项是否大小为 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));
推荐阅读
- laravel - 颤振错误使用jwt令牌授权
- android - 在 FCM 中检索用于群发消息的 notification_key 时出错
- sql-server - Create SQL Global Temp Table while Dynamically Pivoting Years between a Date Range as Columns
- java - 将导航菜单移到顶部,在 Android / XML 操作栏下方
- torch - 如何使用 TorchText 加载 FastText 预训练的词和子词嵌入?
- php - Laravel 7 (php 7.4) 在微型编辑器中显示数据库中的数据,
- java - Flink 连接器与 Confluent Cloud 没有模式注册表
- visual-studio - VIsual Studio 2019 社区 - 任务列表的列宽度为负
- python - 模块 marshmallow.fields 没有 IPv4 属性
- azure-sql-database - 无法从基本 API 获取数据到 Azure 数据工厂