解析 头条面试题

2019-09-12 admin

题目如下:

第一题: 给定一个多为数组arr,实现一个方法获取数组的最大深度(维度)

    例子1:arr=[1,2,[3,4,[6]]]  则返回3
    例子2:arr=[3,4,[6]]  则返回2

    最终代码:(此处只解决单项维度问题)
        var arr=[5,[6,7,8,[3,[9]]]]
        function deep(arr,count=0){
              count++;
              for(var i=0;i<arr.length;i++){
                  if(Object.prototype.toString.call(arr[i]) == '[object Array]'){
                     count= deep(arr[i],count);
                  }
              }
          return count;
        }
         console.log(deep(arr))

   未解决多项维度问题,例如:arr=[1,2,[3,4,5],[2,3,4[6]]];      
   最终代码1:
    var arr= [1,2,[3,4],[5,6,7,[9]]]
        function test4(arr = []) {
          let arrDeepLen = [];
          for (let i = 0; i < arr.length; i++) {
            let item = arr[i];
            if (Array.isArray(item)) {
             const c= test1(item);

             arrDeepLen.push(c+1);
            }
          }

          function test1(arr = [], count = 0) {
            count++;
            for (let i = 0; i < arr.length; i++) {
              const item = arr[i];
              if (Array.isArray(item)) {
                count = test1(item, count);
              }
            }
            return count;
          }
          return Math.max.apply(null,arrDeepLen);
       }
  最终代码2:           
         function deep(arr, count = 0, num = []) {
             count++
            for (let index in arr) {
                if (Array.isArray(arr[index])) {
                    deep(arr[index], count, num)
                } else {
                    num.push(count)
                }
            }

            return Math.max.apply(null, num)
        }

        let arr = [1, 2, 3, ['n', 'i', ['t', ['nihao']]], ['a', 'b']]
       console.log(deep(arr))
  考察范围:回调,此处注意回调堆栈的执行顺序,需要对每次执行返回的数赋值

第二题: 实现一个方法,生成数组[1,2,3,4,…99],然后将数组内的项随机打乱,每一个数 出现在任意一位置的概率相同。

[转载]原文链接:https://segmentfault.com/a/1190000020371568

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-74961.html

文章标题:解析 头条面试题

相关文章
Web缓存基础:术语、HTTP报头和缓存策略
简介 对于您的站点的访问者来说,智能化的内容缓存是提高用户体验最有效的方式之一。缓存,或者对之前的请求的临时存储,是HTTP协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这受控于对该内容所声明的缓存策略...
2016-01-13
javascript实现给定半径求出圆的面积
代码相当简单,这里就不多废话了,小伙伴们自己参考下吧。 &lt;script&gt; var circularityArea = new Function(&quot;r&quot;,&quot;return r*r*Math.PI&quo...
2017-03-25
bootstrap实现的自适应页面简单应用示例
本文实例讲述了bootstrap实现的自适应页面简单应用。分享给大家供大家参考,具体如下: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset=&#x27;u...
2017-03-14
使用vue-grid-layout完成桌面拖拽布局功能
最近在用写公司项目里的一个桌面布局功能 需要使用到vue-grid-layout 看了下网上的 基本上只有demo的使用,这个插件虽然挺不错但是缺陷也很大. 没有下边界,发生碰撞的时候块会无限的往下移动,开放的API个人感觉没什么用 htt...
2018-06-16
H5页面实现下载文件(apk、txt等)的三种方式
需求描述 接到的原始需求是这样的,有一个H5页面,页面中有个“点击下载”的按钮,点击之后,完成下载特定的apk。 大概是下面这样的👇: 需求分析 接到需求的时候我偷乐了一下,这个H5页面最大的优点是不在微信中使用(微信好坑,各种限制,基...
2018-07-18
ES6笔试面试题总结
收集整理的一些ES6的笔试面试题,出处在最底部标明 把以下代码使用两种方法,来依次输出0到9? var funcs = [] for (var i = 0; i &lt; 10; i++) { funcs.push(functi...
2018-04-22
使用AngularJS实现可伸缩的页面切换的方法
AngularJS 1.2 通过引入基于纯CSS class的切换和动画,在一个单页面应用创建页面到页面的切换变得更加的容易。只需要使用一个ng-view,让我们来看一下,一个引入众多的不同切换的可伸缩方法,以及指定的每个页面如何切入和切出...
2017-03-24
angular.js 路由及页面传参示例
页面传参数方法:1、$rootScope。2、(url)/user/:name/:age。 页面转换方法:1、href=&quot;#/&quot; rel=“external nofollow” rel=“external nofollo...
2017-03-15
js面向对象之公有、私有、静态属性和方法详解
现下,javascript大行其道,对于网站开发人员来说,javascript是必需掌据的一门语言,但随着jquery等框架的流行和使用,许多人对于原生javascript缺乏深入的理解,习惯了函数式的编辑风格,对于闭包、原型总是说不清道不...
2017-03-22
使用HTML+CSS+JS制作简单的网页菜单界面
写ABROAD项目用到了标签这个东东,其实标签在WEB上到处可见,图中就依次显示了DCC文章发布器、ABROAD后台添加数据、百度图片搜索、sf发布博客文章时贴标签的样式——标签就像浏览器里原生的checkbox一样,不过checkbox实...
2017-03-27
回到顶部