刷题记录1

1.编写一个函数,这个函数接收一个整数数组 arr 和一个映射函数  fn ,通过该映射函数返回一个新的数组。

返回数组的创建语句应为 returnedArray[i] = fn(arr[i], i) 。

请你在不使用内置方法 Array.map 的前提下解决这个问题。

 我的做法:(对比下和别人的差距)

var map = function(arr, fn) {
    let arr1 = []
    for (i = 0; i <arr.length ; i++)
        arr1.push(fn(arr[i],i))
    return arr1
};

整理下评论看到的做法:

var map = function(arr, fn) {
    return Array.from(arr, fn);
};

其中,Array.from()的语法如下:

Array.from(arrayLike)
Array.from(arrayLike, mapFn)
Array.from(arrayLike, mapFn, thisArg)
var map = function(arr, fn) {
    var temp = [];
    arr.forEach((item, index) => temp[index] = fn(item, index));
    return temp;
};
var map = function(arr, fn) {
    return arr.reduce((p, c, i) => (p.push(fn.apply(null, [c, i])),p) , [])
};
var map = function(arr, fn) {
    return arr.reduce((pre,cur,index)=>{
        pre.push(fn(cur,index))
        return pre
    },[])
};

2.前两个是别人的做法

给定一个函数 fn ,它返回一个新的函数,返回的函数与原始函数完全相同,只不过它确保 fn 最多被调用一次。

  • 第一次调用返回的函数时,它应该返回与 fn 相同的结果。
  • 第一次后的每次调用,它应该返回 undefined 
var once = function(fn) {
    let result;
    return function(...args){
        if(fn){
            result = fn.apply(this,[...args])
            fn=null
        }else{
            result = undefined
        }
        return result
    }
};
var once = function(fn) {
    return function(...args){
        try{
            return fn(...args)
        }
        finally{
            fn=()=>{}
        }
    }
};
var once = function(fn) {
    let flag = 1;
    return function(...args){
        // 第一次fn会被调用,而之后都不会且返回undefined
        // 思路(仿照):设置一个计数器,若为1则返回fn(...args),否则返回undefined
        if (flag === 1) {
           flag++
           return fn(...args)
        }
        else
          return undefined
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值