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



  • 相关阅读:
    艾伟_转载:二十行C#代码打造Ruby Markup Builder 狼人:
    艾伟_转载:WCF基本异常处理模式[上篇] 狼人:
    UVA 11389 The Bus Driver Problem(贪心)
    java list内部构造
    【人在运维囧途_04】 逃离故障的十条运维的工作经验总结
    Windows phone8 基础篇(一) 环境搭建和项目结构说明
    jquery如何把参数列严格转换成数组
    ORA27102: out of memory 故障
    卢松松:周一的文章最难写 晚上发文最合适
    Android开发环境搭建
  • 原文地址:https://www.cnblogs.com/linewman/p/9918551.html
Copyright © 2011-2022 走看看