https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/flat#reduce_concat_isarray_recursivity
let ary = [1, [2, [3, [4, 5]]], 6];
let str = JSON.stringify(ary);
用 reduce 实现数组的 flat 方法
function flatten(ary){
return ary.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur)?flatten(cur):cur)
},[])
}
flatten( [1, 2, [3, 4], [5, [6, 7]]])
递归
let result = [];
let fn = function(ary) {
for(let i = 0; i < ary.length; i++) }{
let item = ary[i];
if (Array.isArray(ary[i])){
fn(item);
} else {
result.push(item);
}
}
}
扩展运算符
while (ary.some(Array.isArray)) {
ary = [].concat(...ary);
}
- flat([1, 2, 3, [4, 5]]) // [1,2,3,4,5]
- flat([1, 2, 3, [[4, 5]]]) // [1,2,3,[4,5]]
- flat([1, 2, 3, [[4, 5]]], 2) // [1,2,3,4,5]
- flat([1,2,3,[1,2,[1,2,3]]]) [1,2,3,1,2,[1,2,3]]
function flat(array, depth=1) {
let result=[]
for (let i = 0; i < array.length; i++) {
let item = array[i]
if (depth > 0 && Array.isArray(item)) {
result = result.concat(flat(item, depth - 1))
} else {
result.push(item)
}
}
return result
}
function flat(array, depth = 1) {
let count = 0
let result = array
while (count < depth) {
for (let i = 0; i < result.length; i++) {
if (Array.isArray( result[i])) {
let item=result.splice(i, 1)
result = [...result, ...item]
}
}
count++
}
return result
}
function flat(array, depth = 1) {
return array.reduce((result, item) => {
if (depth > 0 && Array.isArray(item)) {
result = [
...result,
...flat(item, depth - 1)
]
} else {
result.push(item)
}
return result
}, [])
}
function flat(array,depth=1){
return depth>0?array.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur)?flat(cur,depth-1):cur)
},[]):array.slice()
}
flat([1,2,3,[1,2,[1,2,3]]])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探