javascript - 以这种方式使用平面地图是否合适?
问题描述
基本上,在回答与嵌套数组展平相关的 SO 问题之一时,我已经回答了使用递归展平的问题。
var exampleArray = [ [1,2,3,4], [1,2,[1,2,3]], [1,2,3,4,5,[1,2,3,4,[1,2,3,4]]] ];
function findArrayLengths(input) {
return input.reduce((op,cur)=>{
return Array.isArray(cur) ? op.concat(findArrayLengths(cur)) : op.concat(cur)
},[])
}
let op = exampleArray.map(e=>{
return findArrayLengths(e).length
})
console.log(op);
但我已经看到这段代码似乎也能正常工作(平面无限深度)我读过一些关于Array.prototype.Flat
var arr = [ [1,2,3,4], [1,2,[1,2,3]], [1,2,3,4,5,[1,2,3,4,[1,2,3,4]]], [[1,2,3,4], [1,2,[1,2,3]], [1,2,3,4,5,[1,2,3,4,[1,2,3,4]]]] ];
let op = arr.map(e=> e.flat(Infinity).length);
console.log(op);
所以问题是。像这样用 flat 进行深度展平是否合适,否则会产生后果。?
这是该问题的链接,您可以在此处查看更多信息https://stackoverflow.com/a/53844891/9624435
解决方案
这是 es6 的方式,虽然它可以进一步使用,.reduce
而不是 forEach
const exampleArray = [ [1,2,3,4], [1,2,[1,2,3]], [1,2,3,4,5,[1,2,3,4,[1,2,3,4]]] ];
const flatten = (items) => {
const flat = [];
items.forEach(item => {
if (Array.isArray(item)) {
flat.push(...flatten(item));
} else {
flat.push(item);
}
});
return flat;
}
const do_flat = (arr) => arr.map( (curr) => flatten(curr).length);
const output = do_flat(exampleArray);
console.log({output});
推荐阅读
- wxpython - Wxpython 清除小部件并创建新布局
- java - Keycloak 跳过身份验证流程(选择用户)
- javascript - 剑道模板中的功能:Angular JS1.6
- r - R (dplyr/tidyverse) | 使用 mutate_at 使用 if_else 语句构造一系列新变量
- python-3.x - 如何在kivy中正确导入自定义小部件
- python - 为 Normal Flask python 程序选择年份范围的 Drop 按钮有问题
- javascript - 使用 javascript 应用程序将 JSON 文件保存到服务器
- kubernetes - Kiali 在图表视图中看不到我的服务的任何拓扑
- python - 如何保留excel单元格的尺寸(行高和列宽)?
- jenkins - 从共享库触发 Jenkins 作业