斐波那契数组(首项和第二项都为1,其余的项是前两项之和)

  • 题目:输出斐波那契数组的前20项:
    1. var fb = []
    2. fb[0] = 1
    3. fb[1] = 1
    4. for (var i = 2;i<20;i++){
    5. fb[i] = fb[i-1]+fb[i-2]
    6. }
    7. console.log(fb)

  • 初始化数组
    1. // 初始化一个数组
    2. var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  • 添加一个元素到数组的最后一项 ```javascript // 添加一个元素到数组的最后位置 // 方式一: numbers[numbers.length] = 10

// 方式二: numbers.push(11) numbers.push(12, 13)

alert(numbers)

  1. ---
  2. - 添加一个元素到该数组的首项
  3. ```javascript
  4. // 在数组首位插入一个元素
  5. for (var i = numbers.length; i > 0; i--) {
  6. numbers[i] = numbers[i-1]
  7. }
  8. numbers[0] = -1
  9. alert(numbers) // -1,0,1,2,3,4,5,6,7,8,9,10,11,12,13
  10. // 通过unshift在首位插入数据
  11. numbers.unshift(-2)
  12. numbers.unshift(-4, -3)
  13. alert(numbers) // -4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13

  • 删除数组最后的元素, 可以使用pop()方法
    // 删除最后的元素
    numbers.pop()
    alert(numbers) // -4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12
    

  • 移除首位 ```javascript // 删除首位的元素 for (var i = 0; i < numbers.length; i++) { numbers[i] = numbers[i+1] } numbers.pop() alert(numbers)

// 或者使用shift方法 numbers.shift() alert(numbers)


---

- 通过splice删除特定位置元素
```javascript
// 删除指定位置的几个元素
numbers.splice(5, 3)
alert(numbers) // -4,-3,-2,-1,0,4,5,6,7,8,9,10,11,12,13
  • 上面的代码会删除索引为5, 6, 7位置的元素.
  • 第一个参数表示索引起始的位置为5(其实是第6个元素, 因为索引从0开始的), 删除3个元素.

  • 如果我们希望使用splice来插入数据呢?

    // 插入指定位置元素
    numbers.splice(5, 0, 3, 2, 1)
    alert(numbers) // -4,-3,-2,-1,0,3,2,1,4,5,6,7,8,9,10,11,12,13
    
  • 上面的代码会从索引为5的位置开始插入数据. 其他数据依次向后位移.

  • 第一个参数依然是索引值为5(第六个位置)
  • 第二个参数为0时表示不是删除数据, 而是插入数据.
  • 后面紧跟的是在这个位置要插入的数据, 可以是其他类型, 比如”a”, “b”, “c”.

  • 如果我们希望使用splice来修改数据呢?

    // 修改指定位置的元素
    numbers.splice(5, 3, "a", "b", "c")
    alert(numbers) // -4,-3,-2,-1,0,a,b,c,4,5,6,7,8,9,10,11,12,13
    
  • 上面的代码会从索引5的位置开始修改数据, 修改多少个呢? 第二个参数来决定的.

  • 第一个参数依然是索引的位置为5(第六个位置)
  • 第二个参数是要将数组中多少个元素给替换掉, 我们这里是3个(也可以使用3个元素来替换2个, 可以自己尝试一下)
  • 后面跟着的就是要替换的元素.

数组的常见方法

image.png

  • 数组合并 ```javascript // 数组的合并 var nums1 = [1, 2, 3] var nums2 = [100, 200, 300] var newNums = nums1.concat(nums2) alert(newNums) // 1,2,3,100,200,300

newNums = nums1 + nums2 alert(newNums) // 1,2,3,100,200,300


---

- 迭代方法
- every()方法
- every()方法是将数组中每一个元素传入到一个函数中, 该函数返回true/false.
- 如果函数中每一个元素都返回true, 那么结果为true, 有一个为false, 那么结果为false

- 判断一组元素中是否都包含某一个字符
```javascript
// 定义数组
var names = ["abc", "cb", "mba", "dna"]

// 判断数组的元素是否都包含a字符
var flag = names.every(function (t) {
    return t.indexOf('a') != -1
})
alert(flag)

例题-数组去重

解析

function arrayUnique(target) {
  var result = [target[0]];
  var temp = {};
  temp[target[0]] = true;
  for (var i = 1, targetLen = target.length; i < targetLen; i++) {
    if (typeof temp[target[i]] === 'undefined') {
      result.push(target[i]);
      temp[target[i]] = true;
    }
  }
  return result;
}

这里使用了一个temp对象来保存出现过的元素,在循环中每次只需要判断当前元素是否在temp对象内即可判断出该元素是否已经出现过。