zoukankan      html  css  js  c++  java
  • Array对象的方法实现(2)----Array.prototype.every和Array.prototype.fill(实现常规参数的功能)

    仅供学习参考,发现错请纠正,谢谢!

    4,Array的every方法

    //every 检测数组中的值是否存在满足条件的值,全部满足条件返回true和有一个不满足就返回false,不对空数组进行检测,不改变原数组


    //语法:array.every(function(currentValue,index,arr), thisValue);


    //注意:1,返回一个布尔值。2,原数组不变。

    Array.prototype._every = function(fn){
    	//获取链接数组的参数param,同时用JSON可以深度拷贝数组Array
    	let new_arr = JSON.parse(JSON.stringify(this)),count = 0;
    	
    	for(let i = 0;i < this.length; i++){
    		if(fn(this[i])){
    			count++; 
    		}else{
    			return false;
    		}
    		if(count === this.length){
    			return true;
    		}
    	}
    	return true;
    }
    			
    var everyArr = [2,3,4,1];
    var bool0 = everyArr.every(function(index){
    	return index > 1;
    });
    var bool1 = everyArr._every(function(index){
    	return index > 1;
    });
    console.log(bool0);
    console.log(bool1);
    输出:

    false
    false
    注意:

    (1,在谷歌浏览器测试的时候,this === null,直接返回true,所以我在全局直接返回了一个true,但是我感觉判断有问题


    5,Array的fill方法

    //fill 用于将一个固定值替换数组的元素。


    //语法:array.fill(value, start, end);


    //注意:1,返回一个数组。2,改变原来的数组。

    Array.prototype._fill = function(value, start, end){
    	//获取链接数组的参数param,同时用JSON可以深度拷贝数组Array
    	let param = arguments, new_arr = JSON.parse(JSON.stringify(this)),that = this;
    	
    	function loop(num0,num1){
    		let param0 = num0 || 0,param1 = num1 || new_arr.length;
    		for(let i = param0; i < param1 ; i++){
    			that[i] = param[0];
    		}
    	}
    	
    	if(param.length === 1){
    		loop();
    	}else if(param.length === 2){
    		loop(param[1]);
    	}else if(param.length === 3){
    		loop(param[1],param[2]);
    	}
    	return that;
    }
    
    var fillArr = [1,2,3,4,5,6];
    var fillArr0 = [1,2,3,4,5,6];
    console.log(fillArr.fill(3,0));
    console.log(fillArr);
    console.log(fillArr0._fill(3,0));
    console.log(fillArr0);
    注意:

    (1,由于在loop函数中用了外部的this,所以需要在外部留住this

    Array.prototype.fill = function(value) {
     
        // Steps 1-2.
        var O = Object(this);
     
        // Steps 3-5.
        var len = parseInt(O.length);
     
        // Steps 6-7.
        var relativeStart = parseInt(arguments[1] || 0);
     
        // Step 8.
        var k = relativeStart < 0
                ? Math.max(len + relativeStart, 0)
                : Math.min(relativeStart, len);
     
        // Steps 9-10.
        var relativeEnd = parseInt(arguments[2] || len);
     
        // Step 11.
        var final = relativeEnd < 0
                    ? Math.max(len + relativeEnd, 0)
                    : Math.min(relativeEnd, len);
     
        // Step 12.
        for (; k < final; k++) {
            O[k] = value;
        }
     
        // Step 13.
        return O;
      };

    相关链接:

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/fill



  • 相关阅读:
    php模拟数据请求
    vue指令
    vue指令问题
    属性(property)的特性(attribute)
    数据属性和访问器属性
    json数组
    js--基础(对象、数组、函数、if语句、while语句、do while语句、continue语句、break语句)
    typeof操作符--undefined与null
    js自定义格式时间输出当前时间,封装时间函数
    js 要求传入两个日期时间,返回两个日期时间之间,相差多少天多少小时多少分钟多少秒
  • 原文地址:https://www.cnblogs.com/linewman/p/9918551.html
Copyright © 2011-2022 走看看