ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript数组方法--concat、push

2019-03-20 16:48:22  阅读:318  来源: 互联网

标签:animals JavaScript var 数组 push console concat


利用了两天的时间,使用typescript和原生js重构了一下JavaScript中数组对象的主要方法,可以移步github查看。

这里,按照MDN上的文档顺序,再重新学习一下数组方法吧。

  • concat: concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
    给出的示例是:
    var array1 = ['a', 'b', 'c'];
    var array2 = ['d', 'e', 'f'];
    
    console.log(array1.concat(array2));
    

      期望输出:["a", "b", "c", "d", "e", "f"]。这也符合我们正常的使用方式。那么还有没有特殊的地方呢?
    1、由于concat()方法返回一个新数组,那么如果不传参数,会怎样呢?

    var array1 = ['a', 'b', 'c'];
    var arr3 = array1.concat()
    console.log(array1==arr3);   // false
    

      很明显,可以实现数组的浅拷贝。
    2、如果参数不是数组呢?

    var array1 = ['a', 'b', 'c'];
    var arr3 = array1.concat("3", true, null, undefined, {key: "value"})
    console.log(arr3); 
    

      输出结果:

    把所有参数都当做数组元素拼接到array1后面,并返回一个新的数组实例。
    想到了什么?这种情况是不是与push方法很像。区别在于push是修改原数组,concat是返回新数组。
    到这里,我们是不是可以尝试重构一下concat的方法呢?

    function concat() {
      if (!(arguments[0] instanceof Array)) throw new Error("请确保第一个参数类型为数组")
      var results = []
      for (var i = 0; i < arguments.length; i++) {
        if (!(arguments[i] instanceof Array)) {
          results[results.length] = arguments[i]
          break;
        }
        for (var j = 0; j < arguments[i].length; j++) {
          results[results.length] = arguments[i][j]
        }
      }
      return results
    }
    

      稍作解释的是,没有在数组原型上重构各种方法,仅仅是封装为一个个的函数,所以函数的第一个参数,都要求是需要操作的数组。



  • push:push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
    按照顺序而言,这里不应该是push的,但是既然在谈concat的时候,提到push了,那么就先来push吧!
    惯例,先看MDN给出的示例:

    var animals = ['pigs', 'goats', 'sheep'];
    
    console.log(animals.push('cows'));
    // expected output: 4
    
    console.log(animals);
    // expected output: Array ["pigs", "goats", "sheep", "cows"]
    
    animals.push('chickens');
    
    console.log(animals);
    // expected output: Array ["pigs", "goats", "sheep", "cows", "chickens"]
    

     看结果:

    很容易理解,push修改的是原数组,并返回修改后的数组长度。
    同理,我们分别测试:
    1、不传参数

    var animals = ['pigs', 'goats', 'sheep'];
    var b = animals.push()
    console.log(b );  

    输出值为3,那么3是哪里来的呢?很明显就是animals.length,突然美滋滋的,下次再获取数组长度,是不是可以装X一下!!!
    2、传递多个不同类型的参数

    var animals = [];
    animals.push(['dogs', []],"3", true, null, undefined, {key: "value"})
    console.log(animals);
    

      查看结果:

    就是说不管什么类型的参数,一个参数都将作为一个元素,插入到原数组当中。
    那就重构一下push吧!第一个参数也是需要操作的数组!

    function push(arr) {
      if (!(arr instanceof Array)) throw new Error("请确保参数类型为数组")
      for (var i = 1; i < arguments.length; i++) {
        arr[arr.length] = arguments[i]
      }
      return arr.length
    }
    

     
    剩余的方法,期待后续了!

标签:animals,JavaScript,var,数组,push,console,concat
来源: https://www.cnblogs.com/zhuhuoxingguang/p/10565906.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有