阿里基础面试题

前面的话

分享几题阿里的基础面试题,题目来自小柒看的一场直播课上的。

解析

(1)下面的代码输出结果

var test = (function(a) {
        this.a = a;
        return function(b){
            return this.a+b;
        }
    }(function(a,b){
            return a;
        }(1,2)));
console.log(test(4));

解析:

  • 首先test是一个立即执行函数的结果,这个立即执行函数里的参数:

    function(a,b){
                return a;
            }(1,2)
    

    也是一个立即执行函数,这个函数执行后返回a,即1。所以test可以变为:

    var test = (function(a) {
            this.a = a;
            return function(b){
                return this.a+b;
            }
        }(1));
    
  • 再来看剩下的立即执行函数:

    • this.a = a ,考查this的指向问题,这里是普通函数的调用,this指向window,
      即window.a = 1;

    • 这个立即执行函数返回又了一个函数,即test又可以变为:

       var test = function(b) {
       	return this.a + b;
       }
      

      这里的this同样指向window,即window.a + b;

  • 最后console.log(test(4)),4传给上面的参数b,最后结果 1+ 4 = 5。

(2)不使用循环,如何让长度为100的数组的元素为相应的索引。

解析:

这题有很多解法:定时器、递归等,但是面试官其实最想要的是数组的map方法。

这里直接给出使用map方法实现的过程:

    var crr = new Array(100).join(',').split(',');
    crr = crr.map(function(item, index){
        return index;
    })
    console.log(crr);

因为map方法只会将数组中有值的项进行操作。所以如果只定义一个100长度的数组map是不起作用的。先用join方法将数组转为全为逗号的字符串,再用split方法将字符串以,进行分割,转为数组。这样数组就元素就全为‘,’,解决了数组值为空的问题。

(3)如何优雅的实现数组乱序(洗牌算法)?

解析:

这题考查的同样是数组的方法:sort()。

var arr = [4, 1, 6, 7, 5, 6, 9,8];
    arr.sort(function(a, b) {
        return Math.random()>0.5? 1: -1;   
    })
    console.log(arr);

随机生成0.01 ~0.99 的数,比0.5大返回1,表示a>b不交换位置;比0.5小,返回-1,表示a<b,a与b换值。这样只要返回-1,a和b就会交换,达到了乱序的效果。

(4)如何优雅的计算出数组前十位的和?

这里考查的是数组的reduce方法

 var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13];
    // 先截取前10位,再使用reduce方法
    arr = arr.splice(0,10).reduce(function (pre, crr, index,array) {
        return pre + crr;
    })
    console.log(arr);

总结:前面都是考查的一些高阶函数的使用,数组的5个迭代方法都属于高阶函数。 详细了解高阶函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值