# 数组基础

概念

一个存储元素的线性集合(collection),元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量

# 数组使用

  • 创建数组
var numbers = []
1
  • 字符串生成数组
var sentence = "the quick brown fox jumped over the lazy dog"
var word = sentence.split(' ')
console.log(word)
1
2
3

# 数组常用方法

  • 查找元素

indexOf 函数是最常用的存取函数之一,用来查找传进来的参数在目标数组中是否存在。包含该参数返回对应索引,不包含返回 -1

  • 数组的字符串表示

join()toString()

var names = ["David", "Cynthia", "Raymond", "Clayton", "Mike", "Jennifer"]; 
var namestr = names.join();
console.log(namestr)
namestr = names.toString();
console.log(namestr)
1
2
3
4
5
  • 由已由数组创建新数组

concat()splice()

concat() 合并多个数组,创建一个新的数组

splice() 从现有的数组中截取一个新的数组并返回,原数组被改变

var itDiv = ["Mike","Clayton","Terrill","Raymond","Cynthia","Danny","Jennifer"]; 
var dmpDept = itDiv.splice(3,3);
console.log(dmpDept) // ["Raymond", "Cynthia", "Danny"]
console.log(itDiv) // ["Mike", "Clayton", "Terrill", "Jennifer"]
1
2
3
4
  • 添加元素

push() 添加到末尾

var nums = [1,2,3,4,5];
nums.push(6)
1
2

unshift() 添加到开头

在数组的开头添加元素比在数组末尾添加元素更难,需要把后面的每个元素都相应的向后移动一个位置。

var nums = [2,3,4,5];
var newnum = 1;
var N = nums.length;
for (var i = N; i >= 0; --i) {
  nums[i] = nums[i-1]; 
}
nums[0] = newnum;
console.log(nums); // [1, 2, 3, 4, 5]
1
2
3
4
5
6
7
8
  • 删除元素

pop() 删除数组末尾元素 返回被删除元素

从数组中删除第一个元素需要将后续元素各自向前移动一个位置,和在数组开头添加一个元素一样低效。除了要将后续元素前移一位,还多出了一个元素。

var nums = [9,1,2,3,4,5];
console.log(nums);
for (var i = 0; i < nums.length; ++i) {
  nums[i] = nums[i+1];
}
console.log(nums) // [1, 2, 3, 4, 5, undefined]
1
2
3
4
5
6

shift() 删除数组第一个元素, 返回被删除元素

  • 中间位置添加和删除元素

splice(起始索引,个数,添加元素)

var nums = [1,2,3,7,8,9];
var newElements = [4,5,6]; 
nums.splice(3, 0, newElements);
console.log(nums) // [1, 2, 3, [4,5,6], 7, 8, 9]
1
2
3
4
  • 排序

reverse() 将数组中的元素进行翻转

sort() 按照字典顺序对元素进行排序

# 迭代器

  • 不生成新数组

forEach(fn)

every(fn) 接受一个返回值为布尔类型的函数,对数组中的每个元素都使用该函数。如果对于所有的元素,该函数均返回 true,则该方法返回 true.

let nums = [2, 4, 6, 8, 10]
nums.every((num) => num % 2 == 0)
1
2

some(fn) 接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回 true 该方法就返回 true

reduce(fn) 方法接受一个函数,返回一个值,该方法会从一个累加开始,不断对累加值和数组的后续元素调该函数,直到数组的后一个元素,最后返回得到的累加值。

reduceRight(fn) 从右往左执行

  • 生成新数组的迭代器方法

map(fn) 返回一个新的数组,新数组的元素是对原有元素应用某个函数得到的结果

filter(fn) 返回一个新数组,传入一个返回值为布尔类型的函数,返回符合这个条件的元素

var words = ['recieve','deceive','percieve','deceit','concieve']
words.filter((str) => {
  
})
1
2
3
4