• 重写数组方法 -- js随记


    push

    这个方法是向数组的末尾添加一个或多个元素,并且返回数组新的长度(改变数组长度)

    思路:先把存进来的参数利用 arguments 存起来,遍历 arguments ,并将 arguments 里的元素依次放在数组的末尾。

    1. // 重写push
    2. var arr = [7, 21, 53, 99];
    3. Array.prototype.myPush = function(){
    4. // 把传进来的参数先存起来
    5. // console.log(arguments);
    6. // 遍历arguments
    7. for(var i = 0; i < arguments.length; i++){
    8. // 依次放在数组的最后
    9. this[this.length] = arguments[i];
    10. }
    11. return this.length;
    12. }
    13. var res = arr.myPush(22,76);
    14. console.log(res);
    15. console.log(arr);

    pop

    这个方法不用添加参数,直接将数组最后一个参数弹出数组,并返回这个删除的元素。

    思路:将最后一个元素定义为空,然后将数组长度减一(改变数组长度)

    1. // 重写pop
    2. Array.prototype.myPop = function(){
    3. var del = this[this.length-1];
    4. this[this.length-1] = null;
    5. this.length--;
    6. return del;
    7. }
    8. var res=arr.myPop();
    9. console.log(res);
    10. console.log(arr);

    shift

    这个方法是把数组第一个元素删除,并返回第一个元素的值(改变数组长度)

    思路:从最后一个元素开始遍历数组,依次将后一个赋值给前一个元素(改变数组长度)

    1. // 重写shift
    2. Array.prototype.myShift = function () {
    3. var delfir = this[0];
    4. for (var j = 0; j < this.length-1; j++) {
    5. this[j] = this[j + 1];
    6. }
    7. this.length--;
    8. return delfir;
    9. };
    10. var res = arr.myShift();
    11. console.log(res);
    12. console.log(arr);

    unshift

    这个方法可以向数组的开头添加一个或多个元素,并返回新的数组长度(改变数组长度)

    思路: 先把存进来的参数利用 arguments 存起来,然后将原数组向后移 arguments.length 个位置,arguments 里的元素依次传进新数组(改变数组长度)

    1. // 重写unshift
    2. Array.prototype.myUnShift = function(){
    3. console.log(arguments);
    4. this.length = this.length + arguments.length;
    5. for(let i=this.length; i>0; i--){
    6. if(i>arguments.length){
    7. this[i-1] = this[i-1-arguments.length]
    8. }else{
    9. this[i-1] = arguments[i-1]
    10. }
    11. }
    12. return this.length;
    13. }
    14. var res = arr.myUnShift(34, 59,66);
    15. console.log(res);
    16. console.log(arr);

    every

    这个方法用于检测数组中的所有元素是否都符合指定条件,有一个元素不符合就返回false,都符合条件就返回true,第一个参数是用来判断的函数,还要判断是否有第二个参数,有的话在函数回调时会返回第二个参数。(不改变原始数组)

    思路:利用三目运算符,只要有一个不满足条件就跳出循环 不再判断

    1. // 重写every
    2. var arr = [1, 2, 3, 4];
    3. Array.prototype.myEvery=function(fun,obj){
    4. for(var i = 0;i < this.length; i ++){
    5. if(!(obj?fun.call(obj,this[i],i,this):fun(this[i],i,this))){
    6. return false;
    7. }
    8. }
    9. return true;
    10. }
    11. var res = arr.myEvery(function(item,index,arr){
    12. // 只要有一个不满足条件就跳出循环 不再判断
    13. console.log(this);
    14. return item > 2;
    15. },{name:'zzy'});
    16. console.log(res,arr);

    some

    这个方法用于检测数组中的所有元素是否有元素符合指定条件,如果有一个元素满足条件,则表达式返回*true* , 剩余的元素不会再执行检测。第一个参数是用来判断的函数,还要判断是否有第二个参数,有的话在函数回调时会返回第二个参数。(不改变原始数组)

    1. var arr = [1,2,3,4];
    2. Array.prototype.mySome = function(fun, obj){
    3. for(let i= 0; i<this.length; i++){
    4. // 只要有一个满足条件就返回true
    5. // 是否有第二个参数,有的话不仅要调用fun并且返回第二个参数obj,否则直接调用即可
    6. if((obj?fun.call(obj,this[i],i,this):fun(this[i],i,this))){
    7. return true;
    8. }
    9. }
    10. }
    11. var res = arr.mySome(function(item,index,arr){
    12. return item>1;
    13. },'hello')
    14. console.log(res);

    map

    这个方法会按照原始数组中的元素顺序依次调用函数处理元素,返回一个新数组(不改变原数组)

    1. var arr = [1,2,3,4];
    2. Array.prototype.myMap = function(fun, obj){
    3. let newArr = []
    4. for(let i= 0; i<this.length; i++){
    5. newArr.push(obj?fun.call(obj,this[i],i,this):fun(this[i],i,this))
    6. }
    7. return newArr;
    8. }
    9. var res = arr.myMap(function(item,index,arr){
    10. console.log(this);
    11. return item + 1;
    12. },['hello', 123])
    13. console.log(res);

     fileter

    这个方法会创建一个新数组,新数组里的元素都是通过检查指定数组中符合条件的所有元素。(不改变原数组)

    1. // filter
    2. // 返回一个新数组,包含了符合条件的所有元素。如果没有符合条件的元素则返回空数组。
    3. // 不改变原数组
    4. arr = [1, 2, 3, 4]
    5. Array.prototype.myFilter = function(fun,obj){
    6. let newArr = []
    7. for(let i = 0; i<this.length; i++){
    8. if(obj?fun.call(this[i],i,this):fun(this[i],i,this)){
    9. newArr.push(this[i]);
    10. }
    11. }
    12. return newArr;
    13. }
    14. var res = myFilter(function(item,index,arr){
    15. console.log(this);
    16. return item > 1;
    17. },'yes')
    18. console.log(res,arr);

    forEach

    这个方法用来调用数组中的每个元素,并将元素传递给回调函数,返回值是undefined

    1. // forEach 遍历数组
    2. // forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
    3. // 返回值是undefined
    4. arr = [1, 2, 3, 4]
    5. Array.prototype.myforEach = function(fun,obj){
    6. for(let i = 0; i<this.length; i++){
    7. obj?fun.call(obj,this[i],i,this):fun(this[i],i,this)
    8. }
    9. }
    10. var res = arr.myforEach(function(item,index,arr){
    11. console.log(this);
    12. console.log(item);
    13. },1)
    14. console.log(res);

  • 相关阅读:
    V3s 屏幕LCD驱动总结
    操作系统 | 进程与线程
    【深度学习】YOLOv5 工程落地部署过程 MNN
    2022-08-26 Unity视频播放2——视频剪辑设置
    【AN-Animate教程——熟悉工作区】
    SpringBoot:MyBatis访问数据库(动力)
    Java时间戳互转
    IC卡操作软件支持PN532
    【SQL】MySQL中的SQL优化、explain执行计划
    获取当前时间为本周的第几小时,getHourOfWeek
  • 原文地址:https://blog.csdn.net/qq_48802092/article/details/126474833