算法day1

1.Array.prototype.newJoin();

    用原生JS还原 join 方法,大概思路就是在Array原型中新增一个newJoin方法,首先要知道 join 方法是干什么的,他就是将数组中每一个元素放进一个字符串中,用自定的分隔符将其分割,那么首先就要定义一个空的字符串用来“装”数组中的每一个元素,接下来肯定就要将数组中的每一个元素遍历出来,还要考虑到数组中是否有 null 和 undefined,所以要进行判断,接下来用一个三目运算符来判断是否要插入分隔符,因为最后一个元素是不要插入分隔符的,如果不是最后一个元素,那么就把 this [i] + arguments [0] 加到开始的时候定义的空字符串中,代码如下。

Array.prototype.newJoin = function (str) {
        var string = "";
        for (var i = 0 ; i < this.length ; i++){
            if (this[i] === null || this[i] === undefined){
                this[i] = "";
            }
            if (arguments.length <= 1 && arguments[0] != undefined){
                string += ( i < this.length-1 ) ? this[i] + arguments[0] : this[i];
            }else {
                string += ( i < this.length-1 ) ? this[i] + "," : this[i];
            }
        }
        return string
    }

    var arr = [12,34,456,85,94,33]
    console.log(arr.newJoin("😄"))

 结果自然就是这样啦。

 需要注意的是这里为什么要用 this.lengh 而不是arr.lengh呢,因为考虑到代码的复用性,如果下面还要定义其他数组,比如叫 arr2 、arr3 呢,还有 this 指向的问题,有一个小技巧,谁调用 this 所在的方法,this就指向谁。

2.Array.prototype.newFind();

    用原生 JS 实现 find 方法,大概思路同上, find 方法的作用是返回符合条件的第一个元素,他需要传进来一个函数作为参数,条件就在这个函数中进行判断,当第一个符合条件的数值被返回之后,后续的元素将不会调用执行函数,如果没有符合条件的元素将会返回 undefined ,那么首先我们就要对传进来的参数进行判断,是否为一个函数,否则将抛出一个错误,因为要对数组中的元素进行操作,所以我们需要对数组进行遍历,遍历之后进行一次 if 判断,将遍历的第 i 个元素作为参数传到作为参数传进来的函数中,在函数中进行判断,符合条件则返回 true ,if (true) 自然就会将 this [i] 返回,也就是第一个满足条件的数,代码如下。

Array.prototype.newFind = function (fun) {
        if (typeof fun !== "function"){
            throw new TypeError( `${fun} 傻瓜这不是函数!` )
        }else{
            for (var i = 0 ; i < this.length ; i++){
                if ( fun(this[i]) ){
                    return this[i];
                }
            }
        }
    }

    var arr = [11,22,33,44,777,456];
    const aa = arr.newFind(function (x) {
        return x >= 22
    })
    // const aa = arr.newFind(qwertyuiop)

    console.log(aa)

运行结果如下。

这里需要注意的是 find 方法需要传的参数一定是一个函数 !!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值