2 回答
TA贡献1796条经验 获得超4个赞
该Array.prototype.flat()方法将起作用,只要您为其提供参数 ofInfinity以确保多维数组的所有级别都被展平:
console.log([1, [10, 30, 40, [34, 53], 4], 2].flat(Infinity))
作为替代方案,链接的文档建议使用递归flatDeep方法,该方法使用reduce并concat实现所需的行为:
function flatDeep(arr) {
return arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val) : val), []);
};
console.log(flatDeep([1, [10, 30, 40, [34, 53], 4], 2]));
TA贡献1825条经验 获得超6个赞
一种简单的递归方法是调用Array#reduce并使用Array#concat将每个项目组合成单个结果,但也递归调用unpack_array该项目。这样你就可以处理任何深度的嵌套数组:
function unpack_array(arr) {
if (!Array.isArray(arr)) return [arr];
return arr.reduce((acc, item) => acc.concat(unpack_array(item)), [])
}
console.log(unpack_array([1, [10, 30, 40,[34,53],4],2]))// -> [1,10,30,40,34,53,4,2]
递归的终止条件是如果您到达一个不是数组的项目。你不必须做return [arr]在这种情况下,简单的return arr也可以,但是它只是更一致的这样-你可以打电话unpack_array(7),并得到一个数组回来。
添加回答
举报