当前位置: 首页 > news >正文

【前端面试】七、算法-数组展平

目录

1.判断数组

 2.二维数组展平

3.多维数组展平


1.判断数组

    // 判断数组console.log([].constructor === Array);console.log( Array.isArray([]));console.log( [] instanceof Array);console.log(Object.prototype.toString.call([]) === '[object Array]');

 2.二维数组展平

    const flattenOnce = (arr) => {return [].concat(...arr)}const arr1 = [1, [2, 3], [4, 5, 6], [7, 8, 9, 10]];console.log('flattenOnce',flattenOnce(arr1));

3.多维数组展平

递归

    // 多维数组展平const arr2 = [1, [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, [12, 13, [14, 15]]]];// 递归const flatten1 = (arr) => {return arr.reduce((acc, cur) => {return acc.concat(Array.isArray(cur) ? flatten1(cur) : cur)}, [])}console.log('flatten1',flatten1(arr2));// 递归const flatten2 = (arr) => {return [].concat(...arr.map(item => Array.isArray(item) ? flatten2(item) : item))}console.log('flatten2',flatten2(arr2));

字符串

    function flatten3(arr) {return arr.toString().split(',').map(item => +item)}console.log('flatten3',flatten3(arr2));

循环

    const flatten4 = (arr) => {while(arr.some(item => Array.isArray(item))) {arr = [].concat(...arr)}return arr}console.log('flatten4',flatten4(arr2));

栈的思想

    const flatten5 = arr => {let stack = arr.slice()const r = []while (stack.length) {const item = stack.pop()if(Array.isArray(item)){stack = stack.concat(item) //stack.push(...item)} else {r.unshift(item)}}return r}console.log('flatten5',flatten5(arr2));

生成器 

    function *flatten6(arr){for (let i = 0; i < arr.length; i++) {if(Array.isArray(arr[i])) {yield *flatten3(arr[i])} else{yield arr[i]}}}console.log('flatten6', [...flatten6(arr2)]);function *flatten7(arr) {let stack = arr.slice()while (stack.length) {const item = stack.shift()if(item.constructor === Array) {stack = stack.concat(item) //stack.push(...item)} else {yield item}}}console.log('flatten7', [...flatten7(arr2)]);

http://www.lryc.cn/news/414906.html

相关文章:

  • Laravel php框架与Yii php 框架的优缺点
  • 使用 addRouteMiddleware 动态添加中间
  • Zookeeper未授权访问漏洞
  • 【JavaEE】定时器
  • 2024带你轻松玩转Parallels Desktop19虚拟机!让你在Mac电脑上运行Windows系统
  • 【算法】递归实现二分查找(优化)以及非递归实现二分查找
  • CDN 是什么?
  • 索引:SpringCloudAlibaba分布式组件全部框架笔记
  • 2024第五届华数杯数学建模竞赛C题思路+代码
  • FFmpeg源码:av_reduce函数分析
  • nginx: [error] open() “/run/nginx.pid“ failed (2: No such file or directory)
  • <数据集>BDD100K人车识别数据集<目标检测>
  • 利用SSE打造极简web聊天室
  • 代码随想录第二十天|动态规划(4)
  • TreeSize:免费的磁盘清理与管理神器,解决C盘爆满的燃眉之急
  • 如何建立自己的技术知识体系
  • JS优化了4个自定义倒计时
  • 模型实战(25)之 基于LoFTR深度学习匹配算法实现图像拼接
  • 计算机毕业设计Python+Spark知识图谱高考志愿推荐系统 高考数据分析 高考可视化 高考大数据 大数据毕业设计
  • 【python】文件
  • 《Attention Is All You Need》核心观点及概念
  • 【中项】系统集成项目管理工程师-第9章 项目管理概论-9.9价值交付系统
  • JS+H5美观的带搜索的博客文章列表(可搜索多个参数)
  • 牛客周赛 Round 54 (c++题解)
  • htsjdk库Genotype及相关类介绍
  • C++ 最短路(spfa) 洛谷
  • MySQL的数据类型
  • xss漏洞(四,xss常见类型)
  • 繁简之争:为什么手机芯片都是 ARM
  • 【nnUNetv2进阶】十九、nnUNetv2 使用ResidualEncoder训练模型