利用了两天的时间,使用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
    }

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

JavaScript数组方法--concat、push的更多相关文章

  1. JavaScript数组方法--every、some、fill

    接上一篇,JavaScript数组方法--concat.push,继续其他的数组方法. every:every() 方法测试数组的所有元素是否都通过了指定函数的测试. 先看其使用方法: functio ...

  2. 【译】你应该了解的JavaScript数组方法

    让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...

  3. JavaScript数组方法大全(推荐)

    原网址:http://www.jb51.net/article/87930.htm 数组在笔试中经常会出现的面试题,javascript中的数组与其他语言中的数组有些不同,为了方便之后数组的方法学习, ...

  4. JavaScript数组方法详解

    JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...

  5. JavaScript数组方法大集合

    JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...

  6. 一站式超全JavaScript数组方法大全

    一站式JavaScript数组方法大全(建议收藏) 方法一览表 详细操作 本人总结了JavaScript中有关数组的几乎所有方法(包含ES6之后新增的),并逐一用代码进行演示使用,希望可以帮助大家! ...

  7. 2018.2.27 JavaScript数组方法应用

    JavaScript数组方法应用 1.找出元素item在给定数组arr中的位置 function indexOf(arr,item){ return arr.indexOf(item); } func ...

  8. JavaScript 数组方法处理字符串 prototype

    js中数组有许多方法,如join.map,reverse.字符串没有这些方法,可以“借用”数组的方法来处理字符串. <!doctype html> <html lang=" ...

  9. JavaScript数组方法速查,32个数组的常用方法和属性

    JavaScript数组方法速查手册极简版 http://30ke.cn/doc/js-array-method JavaScript数组方法速查手册极简版中共收了32个数组的常用方法和属性,并根据方 ...

随机推荐

  1. 【集合】Java中的具体集合(一)

    Java中不止提供了集合框架中的接口,还提供了许多具体的实现. Java中的具体集合 集合类型 描述 ArrayList 一种可以动态增长和缩减的索引序列 LinkedList 一种可以在任何位置进行 ...

  2. es6 this指向

    在非箭头函数中,谁调用的函数,this指向就是谁: var obj={ fn:function(){ console.log(this); } } obj.fn();//object 如果this出现 ...

  3. python_ 函数

    函数是啥? 函数能提高应用的模块性,和代码的重复利用率 函数特点? 1 代码块以 def 关键词开头,后接函数名和圆括号() 2 任何传入参数和自变量必须放在圆括号中间 3 函数以冒号开始,并且缩进 ...

  4. 增加删除的js

    <!doctype html><html lang="en"> <head>  <meta charset="UTF-8&quo ...

  5. 一个mysqldump的报错

    1.MySQL版本 5.7.14-log 2.问题分析 mysqldump -uxxx -pxxx db_nale 一般来讲上述命令主要是用于MySQL的逻辑备份,用来备份某个数据的全部表,但是我在执 ...

  6. sqlserver 表操作 SQL篇

    数据库知识点 1.数据库操作: 增:insert into 表名 values(值1,值2,值3) 删:delete 列名 from 表名 where 条件 改:update 表名 set =值 wh ...

  7. edgedb 内部pg 数据存储的探索 (二) 创建数据库命令说明

    前面已经创建好了一个简单可以访问pg 的edgedb 环境,现在测试几个数据库操作命令在pg 的存储 创建数据库 连接环境 注意账户是按照上次创建的环境配置 edgedb -u edgedb 创建数据 ...

  8. ASP.NET MVC中,动态处理页面静态化 【转载】

    首先解释一下什么是动态处理页面静态化 对于需要静态化的页面,第一次访问某个Action时,会先执行Action,并在页面渲染后向Response和服务器中网站的目录下都写入需要返回的html,而第二次 ...

  9. Python图片裁剪

    我们使用的是Image中的crop(box)功能,它需要一个参数box,元组 类型,元组包括4个元素,如:(距离图片左边界距离x, 距离图片上边界距离y,距离图片左边界距离+裁剪框宽度x+w,距离图片 ...

  10. STM32 USB-三个HID-interface 复合(组合)设备的代码实现-基于固件库(原创)

    一.概论: 在STM32_USB-FS-Device_Lib_V4.1.0的Custom_HID工程基础上进行修改: 开发一款设备,有三个HID接口,mouse+pen+自定义HID 其中:0_HID ...