JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus

这篇具有很好参考价值的文章主要介绍了JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

现在的前端面试手撕题是一个必要环节,有点时候八股回答的不错但是手撕题没写出来就会让面试官印象分大减,很可能就挂了…
JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus,javascript,开发语言,ecmascript,前端,react.js

概念

数组的扁平化其实就是将一个多层嵌套的数组转换为只有一层的数组
比如: [1, [2, [3, [4, 5]]]] => [1,2,3,4,5,6]

题目

一、实现一个 flat() easy 难度

function myFlat(arr) {
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      result = result.concat(myFlat(arr[i]));
      // res = [...res, ...myFlat(arr[i])] 这样写也可以
    } else {
      result.push(arr[i])
    }
  }
  return result
}

二、用递归实现 medium 难度

const flat = arr => {
  let res = []
  let rStack = [...arr]
  while (rStack.length) {
    let top = rStack.shift()
    if (Array.isArray(top)) {
      rStack.unshift(...top)
    } else {
      res.push(top)
    }
  }
  return res
}

JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus,javascript,开发语言,ecmascript,前端,react.js
三、控制扁平化的深度 medium 难度
depth 为展平的深度 比如 1 就是将整体深度减一

const myFlat = (arr, depth) => {
  let result = []
  for (const element of arr) {
    if (Array.isArray(element) && depth > 0) {
      result = [...result, ...myFlat(element, depth - 1)]
    } else {
      result.push(element)
    }
  }
  return result
}

四、计算嵌套数组的深度 medium 难度
类似层序遍历!

const getDepth = arr => {
  const queue = [...arr]
  let depth = 1
  while (queue.length > 0) {
    const curLen = queue.length
    for (let i = 0; i < curLen; i++) {
      const cur = queue.shift()
      if (Array.isArray(cur)) {
        queue.push(...cur)
      }
    }
    depth++
  }
  return depth - 1
}

JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus,javascript,开发语言,ecmascript,前端,react.js
五、递归控制扁平化的深度 hard 难度文章来源地址https://www.toymoban.com/news/detail-623389.html

function flattenArrayWithDepth(arr, depth) {
  const flattenedArray = [];
  const queue = [{ array: arr, remainingDepth: depth }];
  while (queue.length > 0) {
    const { array, remainingDepth } = queue.shift();
    for (const item of array) {
      if (Array.isArray(item) && remainingDepth > 0) {
        queue.push({ array: item, remainingDepth: remainingDepth - 1 });
      } else {
        flattenedArray.push(item);
      }
    }
  }
  return flattenedArray;
}

到了这里,关于JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)

    a.shape=(3,2);既数组h=3,w=2 a.shape=(2,3,2);这里第一个2表示axis=0维度上的,三维数组中3,2)数组的个数,这里表示两个(3,2)数组。 这里axis=0指代哪里是很重要的知识点。深度学习中经常压缩一个维度,axis=0。 numpy.squeeze()函数。 语法:numpy.squeeze(a,axis = None);作用是将shape维度为

    2024年01月18日
    浏览(33)
  • JS数据的扁平化处理

    2024年01月18日
    浏览(28)
  • Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分

    目录 341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator  🌟🌟 343. 整数拆分 Integer Break  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个嵌套的整数列表  nestedList  。每个元素要么是

    2024年02月16日
    浏览(35)
  • 022:vue中tree结构数据变成扁平化table结构数据的示例

    第022个 查看专栏目录: VUE ------ element UI 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeMount,mounted, beforeUpdate,upda

    2024年02月12日
    浏览(29)
  • 手撕前端面试题【javascript~ 总成绩排名、子字符串频次统计、继承、判断斐波那契数组等】

    html页面的骨架,相当于人的骨头,只有骨头是不是看着有点瘆人,只有HTML也是如此。 css,相当于把骨架修饰起来,相当于人的皮肉。 js(javascripts),动起来,相当于人的血液,大脑等一切能使人动起来的器官或者其他的。 在刷题之前先介绍一下牛客。Leetcode有的刷题牛客都有,

    2024年01月15日
    浏览(34)
  • 【JavaScript】面试手撕深拷贝

    🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​ 💫个人格言: \\\"如无必要,勿增实体\\\" 上次讲了浅拷贝,这次我们来讲深拷贝。有一说一,深拷贝也算是面试时非常常见的题目了。🐶 深拷贝的作用 首先为什么需要深拷贝,因为浅拷贝无法满足我们对原

    2024年03月13日
    浏览(33)
  • 【JavaScript】面试手撕柯里化函数

    🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​ 💫个人格言: \\\"如无必要,勿增实体\\\" 上周我一个学弟,去字节面试实习生。面试官问他有没有用过柯里化,他摇了摇头。 有一说一,确实柯里化在现实中的项目还是用的比较少的。🐶 面试官继续问他是

    2024年03月15日
    浏览(30)
  • 【手撕面试题】JavaScript(高频知识点三)

    目录 面试官:什么是防抖和节流,他们的应用场景有哪些? 面试官:js中什么是可选操作符,如何访问数组? 面试官:请简述一下 event loop 面试官:请简述 node/v8 中的垃圾回收机制 面试官:如何删除项目中没有使用到的 package? 面试官:请你谈谈 js 中在 new 的时候发生了什么

    2023年04月08日
    浏览(35)
  • 华为od 面试手撕真题【长度最小的子数组】

    给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是

    2024年02月14日
    浏览(28)
  • 【前端面试手撕题】事件委托、数组去重、合法URL、快速排序、全排列

    描述 请补全JavaScript代码,要求如下: 给\\\"ul\\\"标签添加点击事件 当点击某\\\"li\\\"标签时,该标签内容拼接\\\".“符号。如:某\\\"li\\\"标签被点击时,该标签内容为”…\\\" 注意: 必须使用DOM0级标准事件(onclick) 描述 请补全JavaScript代码,要求去除数组参数中的重复数字项并返回该数组。

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包