JavaScript与数据结构之数组

🌞创建和初始化数组

  1. 数组的创建和循环遍历
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // 创建一个不指定长度的空数组
    var dayOfWeek = new Array()
    console.log('dayOfWeek: ' + dayOfWeek)
    // 创建一个指定长度的数组
    var dayOfWeek1 = new Array(7)
    console.log('dayOfWeek: ' + dayOfWeek1)
    // 创建的同时将数据以参数的形式传入
    var dayOfWeek2 = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')
    console.log('dayOfWeek2', dayOfWeek2)
    // 直接使用[]创建数组
    var dayOfWeek3 = []
    console.log('dayOfWeek3', dayOfWeek3)
    // 创建时为数组填充数据
    var dayOfWeek4 = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
    console.log('dayOfWeek4', dayOfWeek4)
    // 查看数组长度
    console.log('dayOfWeek4.length:', dayOfWeek4.length)
    // 循环输出数组中元素
    for(var i = 0; i < dayOfWeek4.length; i++) {
    console.log('dayOfWeek4['+ i +']:', dayOfWeek4[i])
    }

运行结果:

  1. 求“斐波那契数列的前20个数字”

    1. 已知斐波那契数列中第一个数字是1,第二个数字是2,从第三项开始,每一项都等于前两项的和。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      var fibonacci = []
      fibonacci[0] = 1
      fibonacci[1] = 2
      for (var i = 2; i < 19; i++) {
      fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2]
      }
      for (var i = 0; i < fibonacci.length; i++) {
      console.log('fibonacci['+ i +']:', fibonacci[i])
      }
    2. 结果:

      🌞添加和删除数组

  2. 为数组(尾部)添加一个元素

    1. 1
      2
      3
      4
      5
      // 数组初始化
      var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      // 为数组(尾部)添加一个元素
      numbers[numbers.length] = 10
      console.log('numbers:', numbers)
    2. 在JavaScript中,数组是一个可以修改的对象。如果添加一个元素,它就会动态增长。在C和Java等其他语言中,我们如果要决定数组的大小,想要添加元素就要创建一个新的数组,不能简单地往其中添加所需的元素。

    3. 使用push往数组尾部添加一个元素,通过push方法可以添加任意一个元素。

      1
      2
      3
      numbers.push(11)
      numbers.push(12, 13)
      console.log('numbers使用push之后:', numbers)
    4. 为数组的头部添加一个元素:为了实现这个需求,我们腾出数组里的第一个元素的位置,把所有的元素向后移动一位。我们可以循环数组中的元素,从最后一位+1(长度)开始,将其对应的前一个元素的值赋给它,依次处理,最后把我们想要的值赋给第一个位置(-1)上。

      1
      2
      3
      4
      5
        for(var i = numbers.length; i >= 0; i--) {
      numbers[i] = numbers[i - 1]
      }
      numbers[0] = -1
      console.log('numbers使用循环赋值的方法为首位添加值:', numbers)

      这里i初始值为数组长度,利用了数组“下标”比“位置”小1的特点,numbers数组最后一位值为14,下标是13,numbers.length是14,也就是把不存在的numbers[14]先赋值为numbers[13]的值14,然后依次把前面一位的值赋给后面一位,i >= 0是为了保留出numbers[0]这个首位的位置,然后使用numbers[0] = -1把首位赋值。

      • 执行结果:
    5. 使用unshift删除数组中的元素

      1
      2
      3
      4
      // 使用unshift进行数值插入
      numbers.unshift(-2)
      numbers.unshift(-4, -3)
      console.log('使用unshift进行数值插入', numbers)

      结果:

  3. 从数组中移除元素:

    1. 循环错位覆盖从后向前覆盖,移除第一个元素的值:

      1
      2
      3
      4
      5
      // 使用循环错位覆盖,删除数组第一个元素
      for (var i = 0; i < numbers.length; i++) {
      numbers[i] = numbers[i+1]
      }
      console.log('循环错位覆盖删除第一个元素', numbers)


      我们把数组中的所有元素都向左移动了一位,但是数组的长度还是17,这意味着数组中有额外的一个元素(值为undefined)。在最后一次循环中,i + 1引用了一个数组里还未初始化的位置,如果是在其他语言中,这样写可能就会报错了,不得不在numbers.length - 1的位置就停止循环。这些操作只是将数组第一位的值用第二位的值覆盖了,并没有删除元素,数组的长度和以前还是一样的,并且多了一个未定义的元素。

      1. 使用shift()方法:

        1. 删除数组中的第一个元素,可以使用内置的shift()方法,执行该方法后,不但值被移除,而且数组长度也会减一,位置也会被移除。
        1
        2
        3
        // 使用shift()方法移除数组中的元素
        numbers.shift()
        console.log('使用shift()方法移除数组之后:', numbers)

        1. 使用shift()和unshift()方法,可以使用数组模拟基本的队列结构和一些操作。
  4. 在任意位置添加或删除数组中的元素
    1. 通过splice()删除从任意位置上删除任意个连续数组内元素。numbers.splice(5, 3),这段代码删除了从5开始的3个元素,这就意味着numbers[5]numbers[7]numbers[7]被删除了,

🌞二维和多维数组

🌞JavaScript数组方法

  1. 数组合并
  2. 迭代器函数
  3. 搜索和排序
  4. 输出数组为字符串

代码地址:https://gitee.com/sdsxfjh/javascript_and_data_structure

推荐文章