添加元素
数组末尾添加元素:push
数组开头添加元素:unshift
删除元素
数组末尾删除元素:pop
数组开头删除元素:shift
任意位置添加或删除元素
可以使用 splice方法,传入索引和删除元素的数量。
numbers.splice(5, 3);
💡 tips: 还可以用
delete,但是删除位置依然存在,值变为undefined,如delete numbers[0]在操作上等同于numbers[0] = undefined。因此始终使用splice、pop或shift方法来删除数组元素。
现在想把2、3、4插入数组,可以这样做。因为第二个参数是删除元素的个数,写0就是不删除元素。
numbers.splice(5, 0, 2, 3, 4)
二维和多维数组
JavaScript只支持一维数组,并不支持矩阵。但是可以通过嵌套实习矩阵或多维数组。
let averageTemp = [];averageTemp[0] = [72, 75, 79, 79, 81, 81];averageTemp[1] = [81, 79, 75, 75, 73, 73];

创建一个通用函数输出矩阵的值:
function printMatrix(myMatrix) {for (let i = 0; i < myMatrix.length; i++) {for (let j = 0; j < myMatrix[i].length; j++) {console.log(myMatrix[i][j]);}}}
💡 tips: 要在浏览器控制台打印二维数组,还可以使用console.table(myMatrix)语句。它会显示一个更加友好的输出结果。
JavaScript的数组方法
数组合并
concat方法可以向一个数组传递数组、对象或元素。
const zero = 0;const positiveNumbers = [1,2,3];const negativeNumbers = [-3,-2,-1];let numbers = negativeNumbers.concat(zero, positiveNumbers);
最后得到的结果是-3、-2、-1、0、1、2、3。
迭代器函数
有时我们需要迭代数组中的元素,可以用循环语句来处理,例如for语句。不过JavaScript内置了许多数组可用的迭代方法。假设数组中的值是1到15,如果数组里的元素可以被2整除(偶数),就返回true,否则返回false。
function isEven(x) {console.log(x);return x % 2 === 0 ? true : false;}let numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
💡 return (x % 2 === 0) ? true : false也可以写成return (x % 2 === 0)
使用箭头函数简化isEven函数:
const isEven = x => x % 2 === 0;
1.用every方法迭代
every方法会迭代数组中的每一个元素,直到返回false。在这个例子里,数组 numbers 的第一个元素是1,它不是 2 的倍数(1 是奇数),因此 isEven 函数返回 false, 然后 every 执行结束。
numbers.every(isEven);
2.用some方法迭代
some 方法和 every 的行为相反,会迭代数组的每个元素,直到函数返回true。
3.用forEach迭代
如果要迭代整个数组,可以用 forEach 方法。它和使用 for 循环的结果相同。
numbers.forEach(x => console.log(x % 2 === 0));
4.使用map和filter方法
JavaScript 还有两个会返回新数组的迭代方法。第一个是 map。
const myMap = numbers.map(isEven);
数组 myMap 里的值是: [ false, true, false, true, false, true, false, true, false, true, false, true, false, true, false] 。它保存了传入 map 方法的 isEven 函数的运行结果。这样就很容易知道一个元素是否是偶数。比如, myMap[0] 是 false, 因为 1 不是偶数;而 myMap[1] 是true, 因为 2 是偶数。
还有一个filter方法,它返回的新数组由使函数返回true的元索组成。
const evenNumbers = numbers.filter(isEven);
在我们的例子里,evenNumbers 数组中的元素都是偶数:[ 2,4,6,8,10,12,14] 。
5.使用reduce方法
最后是 reduce 方法。 reduce 方法接收一个有如下四个参数的函数: previousValue 、 currentValue 、 index 和 array 。因为 index 和 array 是可选的参数,所以如果用不到它们的话,可以不传。这个函数会返回一个将被叠加到累加器的值, reduce 方法停止执行后会返回这个累加器。如果要对一个数组中的所有元素求和,这就很有用。下面是一个例子。
nurnbers.reduce((previous, current) => previous + current);
输出将是 120。
💡 tips: 这三个方法 (map 、flter 和 reduce) 是 JavaScript 函数式编程的基础。
ES6数组新功能
1.使用for…of循环迭代
for (const n of numbers) {console.log(n % 2 === 0 ? 'even' : 'odd');}
2.使用@@interator对象
3.数组的entries、keys和values方法
4.使用from方法
5.使用Array.of方法
6.使用fill方法
7.使用copyWithin方法
排序元素
首先,我们想反序输出数组 numbers,可以用 reverse方法,然后数组内元素就会反序。
numbers.reverse();
现在,输出 numbers 的话就会看到 [15,14,13,12,…,3,2,1] 。然后,我们使用 sort方法。
numbers.sort();
然而,如果输出数组,结果会是 [1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9] 。看起来不大对,是吧?这是因为 sort 方法在对数组做排序时,把元素默认成字符串进行相互比较。
我们可以传入自己写的比较函数。因为数组里都是数,所以可以像下面这样写。
numbers.sort((a, b) => a - b));
在 b 大于 a 时,这段代码会返回负数,反之则返回正数。如果相等的话,就会返回 0。也就是说返回的是负数,就说明 a 比 b 小,这样sort就能根据返回值的情况对数组进行排序。上面的代码可以表示成如下这样。
function compare(a, b) {if (a < b) {return -1;}if (a > b) {return 1;}return 0;}numbers.sort(compare);
1.自定义排序
2.字符串排序
