-
标准定义:一个存储元素的的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。
-
javascript中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的索引,索引可能是整数。这些数字索引在内部被转换为字符串类型,因为javascript对象中的属性名必须是字符串。
-
创建数组的方式:
- let arr = [1,2,3]
- let arr = new Array(1,2,3) 只有一个参数时表示创建的数组的长度
- 数组中元素可不是同一种数据类型
- 可用Array.isArray()来判断是否为数组
-
当把一个数组赋给另外一个数组时,只是为被赋值的数组增加了一个新的引用。当你通过原引用修改了数组的值,另外一个引用也会感知到这个变化。这种行为被称为浅复制。深复制:
function copy(arr1, arr2) { for (var i=0; i<arr1.length; ++i) { arr2[i] = arr1[i]; } } -
有两个方法将数组转换为字符串:join() 和 toString().两个方法都返回一个包含数组所有元素的字符串,各元素之间用逗号分开。
-
通过已有数组创建新数组:contact() 和 splice()方法。
-
数组的可变函数:push(), unshift(), pop(), shift(), splie(起始索引,想要删除的元素个数, 想要添加进数组的元素); reverse(), sort()。
sort方法说明:
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值 -
数组的迭代器方法,这些方法对数组中的每一个元素应用一个函数,可以返回一个值,一组值或则一个新数组。
- 不生成新数组的迭代器方法:forEach(), every(), some(), reduce(), reduceRight().
reduce()方法接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和数组中的后续元素调用该函数,直到数组中的最后一个元素,最后返回得到的累加值。
- 生成新数组的迭代器方法:map(), filter().
练习
- 创建一个记录学生成绩的对象,提供一个添加成绩的方法,以及一个显示学生平均成绩的方法。
function Grade() { this.data = []; this.add = add; this.average = average; } function add(name, score) { let obj = {}; obj[name] = score; this.data.push(obj); console.log(this.data) } function average() { let length = this.data.length; let total = 0; for (let item of this.data) { total += Object.values(item)[0]; } console.log('平均分', total/length); } let obj = new Grade(); obj.add('张三', 98); obj.add('李四', 94); obj.average(); - 将一组单词存储在一个数组中,并按正序和倒序分别显示这些单词。
let arr = ['hello', 'world', 'hi']; 字符串打印 console.log(arr.join()); console.log(arr.reverse().toString()); - 创建一个对象,将字母存储在一个数组中,并且用一个方法可以将字母连在一起,显示成一个单词。
let arr = ['h', 'w', 'h']; console.log(arr.join(''));