• 各种视角了解数组Array以及案例展示


    数组

    数组方法千千万,不管多少,请先记住下面加粗字体部分(没有原因,死记):

    字符串、对象的互转:     JSON字符串转换为对象:   JSON.parse(str)                     json对象转换为JSON字符串:  JSON.stringify(arr)
    数组、字符串互转:    数组转字符串:join()                          字符串通过特定的符号切割组成数组:split()

    好了,原因是我把上面的方法老记混,所以单独提出来,下来,请看正题数组

    一、数组的定义和特点

    1. 数组是用来存储一组相同数据类型的数据的数据结构。 
    2. 数组变量属于引用数据类型。
    3. 数组中的元素可以是任何数据类型(基本类型和引用类型)。

    二、数组的语法 

    1. var arr = new Array();
    2. var arr = [];

    三、数组的复制

      1、深复制和浅复制    

        假设B复制了A,修改A的时候,看B是否发生变化:
        如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)
        如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)

      2、直接用赋值表达式赋值的复制过程为浅复制

      3、实现深复制的方法:for循环挨个赋值,es6数组扩展运算符,利用数组方法concat

    四、数组的操作

      1、查找元素

        indexOf(); 用来查找元素在数组中是否存在;存在则返回索引,不存在则返回-1
        lastIndexOf(); 返回相同元素中最后一个元素的索引

      2、数组转化为字符串

        join(); toString();

      3、数组的合并

        concat(): 

          concat() 方法用于连接两个或多个数组。
          该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
          arrayObject.concat(arrayX,arrayX,......,arrayX)
        splice():

          向/从数组中添加/删除项目,然后返回被删除的项目
          该方法会改变原始数组。
          splice(position,numberOfItemsToRemove,item)
          splice(索引位置,要删除元素的数量,要添加的元素)
          前两个参数必需,第三个为不必需

        slice():

          可从已有的数组中返回选定的元素。
          该方法不会改变原始数组。
          arrayObject.slice(start,end)
          返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素
          请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。 

    五、可变函数

      1、为数组添加元素

        push(); 方法可向数组的末尾添加一个或多个元素,并返回新的长度。arrayObject.push(newelement1[,newelement2],....[,newelementX])
        unshift();数组前插入 也是返回新的长度
        splice();数组中间添加元素
        也可以使用length属性为数组添加元素,var num = [1,2,3] num[num.length] = 4,但push()方法看起来更直观

      2、从数组中删除元素

        pop();删除数组末尾的元素,并并返回数组的最后一个元素
        shift();删除数组的第一个元素,并返回第一个元素的值。
        splice();删除数组中间的元素
        splice(起始索引,[[需要删除额元素个数(添加元素时该参数设为0)],要添加的数组元素])

      3、为数组排序

        reverse()方法可以将数组中的元素进行翻转
        sort()方法可以对数组进行排序,但是依据的字符串排序,如果要排列的元素是数字,sort()方法的排序结果就不能让人满意了。但是可以在sort方法中传递一个对比函数!

    六、迭代器方法

      迭代器方法可以对数组中的每个元素对应执行一个函数

      1、不生成新数组的迭代器方法

        forEach() 方法对数组的每个元素执行一次提供的函数。arr.forEach(callback[, thisArg]);
        every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值
        some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
        reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值
        reduceRight()

      2、生成新数组的迭代器方法

        map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
        filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

    案例:

      

      

        

        

      

       上述代码运行结果:

          

  • 相关阅读:
    LeetCode No961. 在长度 2N 的数组中找出重复 N 次的元素
    LeetCode No468. 验证IP地址
    LeetCode No56. 合并区间
    LeetCode No50. Pow(x, n)
    LeetCode No1021. 删除最外层的括号
    LeetCode No53. 最大子数组和
    LeetCode No52. N皇后 II
    LeetCode No57. 插入区间
    LeetCode No965. 单值二叉树
    LeetCode No48. 旋转图像
  • 原文地址:https://www.cnblogs.com/dancer0321/p/11820327.html
Copyright © 2020-2023  润新知