重写JavaScript中的join()和find()方法

2021-12-30 11:04发布

一、join()相关介绍

1.方法介绍:

arr.join(separator ):方法用于把数组中的所有元素放入一个字符串。

元素是通过指定的分隔符进行分隔的。如果省略,则数组元素用逗号分隔。

2.重写思路使用如下:

(1)可以先判断数组中是否存在null或者undefined,若存在对其进行相应的处理。

(2)判断函数是否进行传参,用arguments对象查看函数参数的情况。arguments.length用来查看传递参数的个数;arguments[i]是用来查看参数的值。

(3)存在参数,说明需要我们使用传递过来的参数进行分割,不存在参数默认使用 “,” 将数组中的数据分割开来。

3.代码:

<script>
    Array.prototype.newJoin = function () {
        var string = "";
        for (var i = 0; i < this.length; i++) {
            // 判断数组中是否存在null或者undefined,若存在将其变成空字符
            if (this[i] === null || this[i] === undefined) {
                //将数组中null和undefined元素变成空字符
                this[i] = "";
            }
            // 判断是否传参过来,arguments对象表示函数参数的属性,arguments.length求出函数参数的个数,arguments[i]表示某一个参数
            if (arguments.length == 1 && arguments[0] != undefined) {
                string += (i < this.length - 1) ? this[i] + arguments[0] : this[i];
 
            }
            // else表示不传参的情况,默认我们的join函数是使用“ , ”
            else {
                string += (i < this.length - 1) ? this[i] + "," : this[i];
 
            }
        }
        return string;
    }
    var arr = [1, 5, 11, 56, 44, 77, 96];
    var arr2 = [1,88,46];
    var str = arr.newJoin();//1, 5, 11, 56, 44, 77, 96
    var str2 = arr2.newJoin("//");//1//88//46
    console.log(str);
    console.log(str2);
</script>

二、find()相关介绍

1.方法介绍:

find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。

find() 方法为数组中的每个元素都调用一次函数执行:

  • 当数组中的元素在测试条件时返回 true 时,find() 返回符合条件的元素,之后的值不会再调用执行函数。

  • 如果没有符合条件的元素返回 undefined

注意: find() 对于空数组,函数是不会执行的。

注意: find() 并没有改变数组的原始值。

2.重写思路如下:

(1)在重写的find()方法外写一个方法fnB(),该方法是我们查找的依据

(2)根据fnB()在重写的find()方法中进行for循环进行判断是否为想要的结果,如果是则返回该值

3.代码:

<script>
    Array.prototype.newFind=function(fun){
       //判断参数是否为函数不是的话抛出错误
       if(typeof fun!="function"){
          throw new TypeError(`${fun}not a function`)
    }
    for(let i=0;i<this.length;i++){
     // arr.newFind||this指向调用newFind的arr
       if(fun(this[i])){
           return this[i];
      }
     }
    }
    var arr=[1,4,15,55,16,33];
    const val=arr.newFind(function(value){
        return value>55;
    })
    console.log(val);//undefined没有大于55的元素

</script>