JS数组方法手写代码实现(一)

以下代码均本人亲自写的,可能会有考虑不到的情况,请批评指正。

一.JavaScript Array join() 方法

定义和用法

join() 方法将数组作为字符串返回。

元素将由指定的分隔符分隔。默认分隔符是逗号 (,)。

注释:join() 方法不会改变原始数组。

参数值

参数 描述
separator 可选。要使用的分隔符。如果省略,元素用逗号分隔。

原生js手写实现:

  var arr = [12, 15, 25, 36, 88]
    var arr1 = [16]
    var arr2=[]
    Array.prototype.newJoin = function (str) {
        var string = '';
        if (this.length == 1) {
            return string + this[this.length - 1]
        } else {
            string += this[0]
            for (var i = 1; i < this.length; i++) {
                if (str) {
                    string += (str + this[i])
                }
                else {
                    string += (',' + this[i])
                }
            }
            return string
        }
    }
    var str = arr.newJoin(' * ');
    console.log(str);
    console.log(arr1.newJoin());
    console.log(arr2.newJoin());

二.JavaScript Array find() 方法

定义和用法

find() 方法返回数组中第一个通过测试的元素的值(作为函数提供)。

find() 方法对数组中存在的每个元素执行一次函数:

  • 如果找到函数返回 true 值的数组元素,则 find() 返回该数组元素的值(并且不检查剩余值)
  • 否则返回 undefined

注释:find() 不对空数组执行该函数。

注释:find() 不会改变原始数组。

参数 描述
function(currentValue, index, arr) 必需。为数组中的每个元素运行的函数。

函数参数:

参数 描述
currentValue 必需。当前元素的值。
index 可选。当前元素的数组索引。
arr 可选。当前元素所属的数组对象
thisValue

可选。要传递给函数以用作其 "this" 值的值。

如果此参数为空,则值 "undefined" 将作为其 "this" 值传递。

原生js手写实现: 

     var arr=[10,52,65,2,44]
    var arr1=[99,88,89,96,91]
    Array.prototype.newFind = function (fun) { //重写newfind方法
        for (var i = 0; i < this.length; i++) { //循环遍历整个数组
            if (fun(this[i])) {     //判断满足fun条件的第一个数的索引
                return this[i];
            }
        }
        return undefined;
    }
    function test(val) { //测试函数 求满足值小于50的
        return val < 50;
    }
    console.log(arr.newFind(test));
    console.log(arr1.newFind(test));

三.JavaScript Array push() 方法

定义和用法

push() 方法向数组末尾添加新项目,并返回新长度。

提示:新的项目将被添加到数组的末尾。

注释:push() 方法会改变数组的长度。

提示:如需在数组的开头添加项目,请使用 unshift() 方法。

参数 描述
item1, item2, ..., itemX 必需。要添加到数组中的项目。

原生js手写实现: 

var arr = [12, 15, 25, 36, 88]
    Array.prototype.newPush = function () {     
        console.log(arguments.length);   
        //为了防止循环时候值发生变化,先用变量存起来
        var arrlen=this.length;
        var arglen=arguments.length;
            for (var i = 0; i < arglen; i++) {
                this[arrlen+i] = arguments[i];
            }
    }
        // arr.newPush()
        // console.log(arr);
    arr.newPush(96,18,8)
    console.log(arr);

四.JavaScript Array pop() 方法

定义和用法

pop() 方法移除数组的最后一个元素,并返回该元素。

注释:pop() 方法会改变数组的长度。

提示:如需删除数组的第一个元素,请使用 shift() 方法。

参数

无参数。

原生js手写实现: 

 var arr=[12,15,25,36,88]
    Array.prototype.newPop=function(){
        var remove=this[this.length-1];
        this.length--;
        return remove;
    }

    let remove=arr.newPop();
    console.log(remove);
    console.log(arr);

五.JavaScript Array every() 方法

定义和用法

every() 方法检查数组中的所有元素是否都通过了测试(被作为函数提供)。

every() 方法对数组中存在的每个元素执行一次函数:

  • 如果找到函数返回 false 值的数组元素,every() 返回 false(并且不检查剩余值)
  • 如果没有出现 false,every() 返回 true

注释:every() 不对没有值的数组元素执行函数。

注释:every() 不改变原始数组。

参数 描述
function(currentValue, index, arr) 必需。为数组中的每个元素运行的函数。

函数参数:

参数 描述
currentValue 必需。当前元素的值。
index 可选。当前元素的数组索引。
arr 可选。当前元素所属的数组对象
thisValue

可选。要传递给函数以用作其 "this" 值的值。

如果此参数为空,则值 "undefined" 将作为其 "this" 值传递。

原生js手写实现: 

 var arr=[10,52,65,2,44]
    var arr1=[99,88,89,96,91]
    Array.prototype.newEvery=function(fun){
        for(var i=0;i<this.length;i++){
            if(!fun(this[i])){
                return false
            }
        }
        return true;
    }
    function test(val){
        return val>50;
    }
    console.log(arr.newEvery(test));
    console.log(arr1.newEvery(test));

六.JavaScript Array some() 方法

定义和用法

some() 方法检查数组中的任何元素是否通过测试(作为函数提供)。

some() 方法对数组中存在的每个元素执行一次函数:

  • 如果找到函数返回真值的数组元素,some() 返回真(并且不检查剩余值)
  • 否则返回 false

注释:some() 对没有值的数组元素不执行函数。

注释:some() 不改变原始数组。

参数 描述
function(currentValue, index, arr) 必需。为数组中的每个元素运行的函数。

函数参数:

参数 描述
currentValue 必需。当前元素的值。
index 可选。当前元素的数组索引。
arr 可选。当前元素所属的数组对象
thisValue

可选。要传递给函数以用作其 "this" 值的值。

如果此参数为空,则值 "undefined" 将作为其 "this" 值传递。

原生js手写实现: 

      var arr=[10,52,65,2,44]
    var arr1=[99,88,89,96,91]
    Array.prototype.newSome=function(fun){
        for(var i=0;i<this.length;i++){
            if(fun(this[i])){
                return true
            }
        }
        return false;
    }
    function test(val){
        return val<50;
    }
    console.log(arr.newSome(test));
    console.log(arr1.newSome(test));

七.JavaScript Array shift() 方法

定义和用法

shift() 方法移除数组的第一项。

注释:shift() 方法会改变数组的长度。

注释:shift 方法的返回值是被移除的项目。

注释:shift() 方法会改变原始数组。

提示:如需删除数组的最后一项,请使用 pop() 方法。

参数

无参数。

原生js手写实现: 

    var arr=[10,52,65,2,44]
    var arr1=[99,88,89,96,91]
    Array.prototype.newShift=function(){
        var remove=this[0];
        for(var i=0;i<this.length-1;i++){
            this[i]=this[i+1];
        }
        this.length--;
        return remove;
    }
    let remove=arr.newShift();
    let qq=arr1.newShift();
    console.log(remove);
    console.log(arr);
    console.log(qq);
    console.log(arr1);

八.JavaScript Array slice() 方法

定义和用法

slice() 方法以新的数组对象,返回数组中被选中的元素。

slice() 方法选择从给定的 start 参数开始的元素,并在给定的 end 参数处结束,但不包括。

注释:slice() 方法不会改变原始数组。

参数 描述
start

可选。整数,指定从哪里开始选择(第一个元素的索引为 0)。

使用负数从数组的末尾进行选择。如果省略,则类似于 "0"。

end

可选。整数,指定结束选择的位置。

如果省略,将选择从开始位置到数组末尾的所有元素。使用负数从数组末尾进行选择。

原生js手写实现: 

    var arr=[12,15,16,18]
    var arr1=[14,15,16,17,18,19]
    Array.prototype.newSlice=function(startIndex,endIndex){
        let start=0;
        let end=this.length;
        //开始索引,负数从后数
        if(startIndex){        
            if(startIndex<0){
                start=this.length+startIndex;
            }else{
                start=startIndex;
            }
        }
        //结束索引,负数从后数
        if(endIndex){
            if(endIndex<0){
                end=this.length+endIndex;
            }else{
                end=endIndex;
            }
        }
        var newarr=[];
        for(var i=start,j=0;i<end;i++,j++){
            newarr[j]=this[i];
        }
        return newarr;
    }
   console.log(arr.newSlice(2)); 
   console.log(arr);
   console.log(arr1.newSlice(-3,-1));

九.JavaScript Array reverse() 方法

定义和用法

reverse() 方法反转数组中元素的顺序。

注释:reverse() 方法将改变原始数组。

参数

无参数。

原生js手写实现: 

  Array.prototype.newReverse = function () {
        var newarr=[]; //新开辟一个地址存放临时数组
        for(var i=0;i<this.length;i++){
            newarr[i]=this[i];          //令一个临时数组等于传来的数组
        }
        for (var i = this.length - 1,j=0; i >=0; i--,j++) {     
            this[i] = newarr[j]        //让传过来的数组的最后一位等于临时数组的第一位
        }
    }

    var arr = [12, 34, 56, 78, 90];
    arr.newReverse();
    console.log(arr);

十.JavaScript Array findIndex() 方法

定义和用法

findIndex() 方法返回数组中通过测试的第一个元素的索引(作为函数提供)。

findIndex() 方法对数组中存在的每个元素执行一次函数:

  • 如果找到函数返回 true 值的数组元素,则 findIndex() 返回该数组元素的索引(并且不检查剩余值)
  • 否则返回 -1

注释:findIndex() 不会为没有值的数组元素执行函数。

注释:findIndex() 不会改变原始数组。

参数 描述
function(currentValue, index, arr) 必需。为数组中的每个元素运行的函数。

函数参数:

参数 描述
currentValue 必需。当前元素的值。
index 可选。当前元素的数组索引。
arr 可选。当前元素所属的数组对象
thisValue

可选。要传递给函数以用作其 "this" 值的值。

如果此参数为空,则值 "undefined" 将作为其 "this" 值传递。

原生js手写实现: 

    var arr = [52, 52, 65, 2, 44]
    var arr1 = [99, 88, 89, 96, 91]
    Array.prototype.newFind = function (fun) { //重写newfind方法
        for (var i = 0; i < this.length; i++) { //循环遍历整个数组
            if (fun(this[i])) {     //判断满足fun条件的第一个数的索引
                return i;
            }
        }
        return -1;
    }
    function test(val) { //测试函数 求满足值小于50的
        return val < 50;
    }
    console.log(arr.newFind(test));
    console.log(arr1.newFind(test));

猜你喜欢

转载自blog.csdn.net/m0_55315930/article/details/127895796