遍历
1、for:最常用也最简单,普通for循环才是最优雅的
for(j = 0; j < arr.length; j++) {
// 最简单
}
或
for(j = 0,len=arr.length; j < len; j++) {
// 比第一个性能高,不用每次都计算arr的长度
}
2、for in:性能最低
for(j in arr) {
}
3、for of:这种方式是es6里面用到的,性能要好于forin,但仍然比不上普通for循环。它被设计用来遍历各种类数组集合,例如DOM NodeList对象、Map和Set对象,甚至字符串也行。
for(let value of arr) {
}
4、forEach:数组自带的foreach循环,使用频率较高,实际上性能比普通for循环弱;
arr.forEach(function(e){
});
或
Array.prototype.forEach.call(arr,function(el){
//由于foreach是Array型自带的,对于一些非这种类型的,无法直接使用(如NodeList),所以才有了这个变种,使用这个变种可以让类似的数组拥有foreach功能。
});
5、map:这种方式也是用的比较广泛的,虽然用起来比较优雅,但实际效率还比不上foreach
arr.map(function(item, index){
});
迭代
every:对数组的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
some:对数组的每一项运行给定函数,如果该函数对任何一项返回true,则返回true。
map:对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组。
filter:对数组的每一项运行给定函数,返回该函数执行结果为true的项组成的数组。
find:对数组的每一项运行给定函数,返回第一个函数执行结果为true的项。
检测数组
if (value instanceOf Array) {
// 如果页面中存在其他iframe的话,那么可能存在两个版本以上的Array的构造函数
}
或
if (Array.isArray(value)) {
// 没有上诉问题
}
栈、队列方法
arr.push('red', 'blud'); // 最后面推入两项
arr.pop(); // 取出最后一项
arr.shift(); // 取出第一项
arr.unshift('yellow'); // 最前面压入一项
排序
arr.sort((a,b) => {
return a - b; // 小于0是升序,大于0是降序
})
arr.reverse(); // 数组反转
操作方法
arr1.concat(arr2); // 数组拼接
arr.slice(start,[end]); // 返回从start到end的一个新数组,不影响原数组
arr.splice(start, length, [replace]); //从start位置,删除length个元素,再插入replace
如 arr.splice(2, 0, 'red', 'blud'),从第2个位置,删除0个,插入red和blud
位置方法
arr.indexOf(5); // 5第一次出现的位置
arr.lastIndexOf(5); // 5最后一次出现的位置
arr.includes(5); // 数组中是否包含5
归并方法
var values = [1,2,3,4,5];
var sum = values.reduce((pre, cur, index, array) =>{
// pre 是上一次计算的结果,第一次是values[0]
// cur 是当前值,第一次是values[1]
return pre + cur;
})
alert(sum) // 15