1 创建和初始化数组
1.1 方式一:构造函数创建
//创建指定长度的空数组
var emptyArr = new Array(5);
//创建并初始化数组
var dayOfWeek = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
1.2 方式二:[]直接创建
var dayOfWeek2 = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
1.3 获取数组长度
var len = dayOfWeek.length;
1.4访问元素,使用索引访问指定元素
var one = dayOfWeek[2];
console.log ( one );
1.5 迭代数组:使用for循环
for ( var i = 0 ;i<dayOfWeek.length;i++ ) {
console.log ( dayOfWeek[ i ] );
}
2 添加元素
假设已有如下数组
var numbers = [0,1,2,3,4,5,6,7,8,9];
2.1 添加到数组末尾
方式1:往 数组名.length的位置添加元素,相当于把元素添加到数组的末尾
numbers[numbers.length] = 10;
console.log ( numbers );
方式2:使用Array.push方法,把元素添加到数组的末尾
numbers.push(10);
console.log ( numbers );
2.2 添加到数组首位
方式1:倒着遍历数组,将所有元素往后移动一个位置,把第一个位置空出来,再给第一个索引赋值
for ( var i = numbers.length ;i>=0;i-- ) {
numbers[i] = numbers[i-1];
}
//添加新元素到索引0处
numbers[0] = -1;
console.log ( numbers );
方式2 使用Array.unshift方法
numbers.unshift(-1);
console.log ( numbers );
3 删除元素
已知数组如下:
var numbers = [0,1,2,3,4,5,6,7,8,9,10];
3.1 删除数组最后一个元素
1 删除数组最末尾的元素: 方式1 使用pop()方法
numbers.pop();
方式2 改变数组长度
numbers.length--;
3.2 删除数组的第一个元素
方式1: 遍历数组,将每一个元素往前面移动一个位置,最后再修改数组长度-1,清除最后一个undefined的元素,第2个元素会把第1个元素覆盖
for ( var i = 0 ;i<numbers.length;i++ ) {
numbers[i] = numbers[i+1];
}
numbers.length--;
方式2: 使用Array.shift()方法
numbers.shift();
console.log ( numbers );
4 修改元素(任意位置添加或者删除)
已知数组如下:
var numbers = [0,1,2,3,4,5,6,7,8,9,10];
4.1 Array.splice方法介绍
数组.splice(索引号,删除元素的个数,item1,.....,itemX);
说明:向/从数组中添加/删除项目,然后返回被删除的项目。
参数1 :规定添加/删除元素的位置 参数2: 删除元素的个数,如果设置为0,则不会删除元素 参数3: item1, ..., itemX 参数:向数组添加的新元素
4.2 在任意位置删除元素
numbers.splice(1,3); //从索引=1位置开始,删除3个元素,即是1,2,3会被删除
console.log ( numbers );
4.3 在任意位置添加元素
numbers.splice(1,0,5);//索引1的位置添加数字5
console.log ( numbers );
5 数组合并
concat()方法,连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本
var zero = 0;
var positiveNumbers = [1,2,3];
var negativeNumbers = [-3,-2,-1];
var newArr = negativeNumbers.concat(0,positiveNumbers);
console.log ( newArr.toString() );
console.log ( negativeNumbers.toString() );
6 迭代器函数
6.1 every方法
every方法检测数组所有元素是否都符合指定条件(通过函数),
- 如果有一个元素不满足,则整个表达式返回 false,结束迭代
- 如果所有元素都满足,才返回true
例子:
var numbers = [0,1,2,3,4,5,6,7,8,9,10];
//判读元素x是否大于8,大于返回true,否则返回false
function isGreaterThan10 ( x ) {
return x>8;
}
var res = numbers.every(isGreaterThan10);
console.log ( res );//false
核心:所有元素都要满足条件
6.2 some方法
some方法会迭代数组的每个元素,检测数组中的元素是否满足指定条件(函数提供)
- 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
- 如果没有满足条件的元素,则返回false
核心:只有有一个满足条件就行
例子:
var numbers = [0,1,2,3,4,5,6,7,8,9,10];
var res_some = numbers.some(isGreaterThan10);
console.log ( res_some );
6.3 forEach方法
forEach方法。它和使用for循环的结果相同,调用数组的每个元素,并将元素传递给回调函数执行 没有返回值,如果需要结果,使用Array.map方法
var numbers = [0,1,2,3,4,5,6,7,8,9,10];
numbers.forEach(function ( x ) {
console.log(x);
});
6.4 map方法
map() 方法返回一个新数组,新数组中的元素为原始数组元素调用函数处理后的结果
var numbers = [0,1,2,3,4,5,6,7,8,9,10];
function isGreaterThan10 ( x ) {
return x>8;
}
var new_numbers1 = numbers.map(isGreaterThan10);
// [false, false, false, false, false, false, false, false, false, true, true]
console.log ( new_numbers1 );
6.5 filter方法
filter() 方法创建一个新的数组,新数组中的元素为原始数组元素满足指定条件(函数)的所有元素。
var numbers = [0,1,2,3,4,5,6,7,8,9,10];
function isGreaterThan10 ( x ) {
return x>8;
}
var newArr2 = numbers.filter(isGreaterThan10);
console.log ( newArr2 );//[9, 10]
6.6 reduce方法
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
array.reduce( function(total, currentValue, currentIndex, arr), initialValue)
参数1:
- function(total, currentValue, currentIndex, arr) 用于执行每个数组元素的函数
- total 必需。初始值, 或者计算结束后的返回值。
- currentValue 必需。当前元素
- currentIndex 可选。当前元素的索引
- arr 可选。当前元素所属的数组对象。
参数2: 初始值
计算数组有元素之和,初始值为total
var result = numbers.reduce(function ( total,currentEle ) {
return total+currentEle;
});
console.log ( result );//55
6 entries、keys和values方法
6.1 entries() 方法
entries() 方法返回一个数组的迭代对象,该对象包含数组的键值对 (key/value)
var numbers = [0,1,2,3,4,5,6,7,8,9,10];
var aEntries = numbers.entries();
console.log ( aEntries.next ().value );//[0, 0] 索引 0 的值为1
console.log ( aEntries.next ().value );//[1, 1] 索引 1 的值为1
console.log ( aEntries.next ().value );//[2, 2] 索引 2 的值为2
console.log ( aEntries.next ().value );//[3, 3] 索引 3 的值为3
keys()
keys() 方法返回一个数组的迭代对象,该对象包含数组的所有键
var allKeys = numbers.keys();
console.log ( allKeys.next() );//{value: 0, done: false}
console.log ( allKeys.next() );//{value: 1, done: false}
console.log ( allKeys.next() );//{value: 2, done: false}
console.log ( allKeys.next() );//{value: 3, done: false}
一旦没有可迭代的值,aKeys.next()就会返回一个value属性为undefined,done属性为true的对象。 如果done属性的值为false,就意味着还有可迭代的值。
values()
values() 方法返回一个数组的迭代对象,该对象包含数组每个索引的值
var allValues = numbers.values();
console.log ( allValues.next () );//{value: 0, done: false}
console.log ( allValues.next () );//{value: 1, done: false}
console.log ( allValues.next () );//{value: 2, done: false}
console.log ( allValues.next () );//{value: 3, done: false}
一旦没有可迭代的值,allValues.next()就会返回一个value属性为undefined,done属性为true的对象。 如果done属性的值为false,就意味着还有可迭代的值。