学习javaScript数据结构与算法之数组
1、创建和初始化数组
- 使用new关键字 var daysOfWeek = new Array();
- 使用括号[] var daysOfWeek = [];
- 使用 length 获取数组个数
2、访问元素和迭代数组
访问数组中的特定位置的元素,可以使用中括号传递数值位置而得到想知道的值或者赋新的值。
3、添加元素
var numbers = [0,1,2,3,4,5,6,7,8,9];
(3.1)添加元素:numbers[numbers.length] =10;
注意!!!!!!
在javascript中,数组是可以修改的对象。如果添加元素,它会自动增长。而j在ava和c等其它语言里,我们要决定数组的大小。
(3.2)使用push方法
push()方法能把元素添加到数组的末尾。通过push(),能添加任意个元素:
numbers.push(11);
numbers.push(12,13);
code:
var numbers = [0,1,2,3,4,5,6,7,8,9];
numbers[numbers.length]=10;
numbers.push(11);
for(var i=0;i<numbers.length;i++){console.log(numbers[i])}
结果:
(3.3)插入元素到数组首位----unshift()方法
传统做法:通过向右移动一个位置,腾出数组第一个元素位置然后赋值。
for (var i=numbers.length; i>=0; i--){ numbers[i] = numbers[i-1]; } numbers[0] = -1;
现在:使用unshift() numbers.unshift(-2);
code:
结果:
4、删除元素 -
(4.1)----从数组末尾删除使用 pop()方法
(4.2)从数组首位删除元素使用 shift()方法
注意!!!!! 通过shift和unshift方法,能够用数组模拟基本的队列数据结构。
通过pop和push能够模拟栈的数据结构。
(4.3)在任意位置添加或删除元素
可以使用splice方法,简单地通过指定位置/索引,就可以删除相应位置和数量的元素。
例如:numbers.splice(5,3);
表示删除了从数组索引5开始的3个元素。
对于numbers.splice(5,0,2,3,4);
splice方法接收的第一个参数表示想要删除或插入的元素的索引值。第二个参数是删除元素的个数(这里0表示传入)。第三个参数往后,就是要添加到数组里的值。
扩展:
对于js数组和对象,我们还可以用delete操作符删除数组中的元素。然而数组某个位置的值会变成undefined。因此,始终使用splice、pop或shift等方法来删除数组元素。
5、数组合并
concat ----连接2个或更多的数组,并返回结果(返回数组长度及数组)。concat方法可以向一个数组传递数组、对象或是元素。数组会按照该方法传入的参数顺序连接指定数组。
eg:
结果:
6、迭代器函数
6.1 用every 方法迭代
every方法会迭代数组中的每一个元素,直到返回false.该方法测试数组的所有元素是否都通过了指定函数的测试。
语法: arr.every(callback[,thisArgs])---------------------->其中callback是指用来测试每个元素的函数
every 不会改变原数组。
6.2用some方法迭代
some()方法测试数组中的某些元素是否通过了指定函数的测试点。some方法会迭代数组的每个元素,直到函数返回true.
6.3用foreach方法
迭代整个数组。
eg: let numbers=[1,2,3,4,5,6];
numbers.forEach(function(x){
console.log((x%2 == 0));
});
6.4 使用map和filter方法
JavaScript还有两个会返回新数组的遍历方法。
第一个是map: var 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是偶数。
6.5 filter方法。
它返回的新数组由使函数返回true的元素组成: var evenNumbers = numbers.filter(isEven); 在我们的例子里,evenNumbers数组中的元素都是偶数:[2, 4, 6, 8, 10, 12, 14]。
6.6 使用reduce方法
最后是reduce方法。reduce方法接收一个函数作为参数,这个函数有四个参数: previousValue、currentValue、index和array。这个函数会返回一个将被叠加到累加器的 值,reduce方法停止执行后会返回这个累加器。如果要对一个数组中的所有元素求和,这就很 有用,比如: numbers.reduce(function(previous, current, index){ return previous + current; }); 输出将会是120。