1.数组检测
typeof
返回object,不能区分数组和对象
instanceof
例:if (value instanceof Array){
//对数组执行某些操作
}
不适用于多个执行环境下,如网页中包含多个框架
Array.isArray() 适用于多个执行环境下,但可能低版本浏览器不兼容
2.转换方法
toString() 返回字符串
toLocaleString() 一般情况下返回和toString相同
valueOf() 返回数组
join()
接收一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串,不传默认逗号分隔
例:
let arr=[1,2,3,4,5,6]
console.log(arr.toString()) //1,2,3,4,5,6
console.log(arr.toLocaleString()) //1,2,3,4,5,6
console.log(arr.valueOf()) //[1, 2, 3, 4, 5, 6]
console.log(arr.join()) //1,2,3,4,5,6
console.log(arr.join('-')) //1-2-3-4-5-6
3.栈丶队列
push() 向数组末尾添加新元素,返回数组的length
pop() 删除数组最后一个元素,返回移除的项
unshift() 向数组开头添加新元素,返回数组的length
shift() 删除数组第一个元素,返回移除的项
4.排序
sort() 数组从小到大排序,可传入排序函数
reverse() 反转数组
例(排序函数):
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
简化:
function compare(value1, value2){
return value2 - value1;
}
5.操作方法
不会改变原数组:
concat() 合并数组和参数,参数可以是元素或数组,返回新的数组
slice() 分割数组,返回新的数组。可以接收2个参数,传一个参数(i),返回从i到结尾的数组(包括i);传2个参数(i,j),返回从i到j的数组(包括i,不包括j)
会改变原数组:
splice() 返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则返回一个空数组)。
删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。
例如, splice(0,2) 会删除数组中的前两项。
插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、0(要删除的项数)
和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。例如,
splice(2,0,"red","green") 会从当前数组的位置 2 开始插入字符串 "red" 和 "green" 。
替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起
始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,
splice (2,1,"red","green") 会删除当前数组位置 2 的项,然后再从位置 2 开始插入字符串
"red" 和 "green" 。
6.查找
indexOf() 从数组的开头(位置 0)开始向后查找
lastIndexOf() 从数组的末尾开始向前查找
indexOf() 和 lastIndexOf() 这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引,都返回要查找的项在数组中的位置,或者在没找到的情况下返回1。
7. 迭代方法
ECMAScript 5 为数组定义了 5 个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响 this 的值。传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。根用的方法不同,这个函数执行后的返回值可能会也可能不会影响方法的返回值。以下是这 5 个迭代方法的作用。
every() :对数组中的每一项运行给定函数,如果该函数对每一项都返回 true ,则返回 true 。
filter() :对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
forEach() :对数组中的每一项运行给定函数。这个方法没有返回值。
map() :对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
some() :对数组中的每一项运行给定函数,如果该函数对任一项返回 true ,则返回 true 。
以上方法都不会修改数组中的包含的值。
在这些方法中,最相似的是 every() 和 some() ,它们都用于查询数组中的项是否满足某个条件。对 every() 来说,传入的函数必须对每一项都返回 true ,这个方法才返回 true ;否则,它就返回false 。而 some() 方法则是只要传入的函数对数组中的某一项返回 true ,就会返回 true 。
例子:
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item, index, array){
return (item > 2);
});
alert(everyResult); //false
var someResult = numbers.some(function(item, index, array){
return (item > 2);
});
alert(someResult); //true
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item, index, array){
return (item > 2);
});
alert(filterResult); //[3,4,5,4,3]
var numbers = [1,2,3,4,5,4,3,2,1];
var mapResult = numbers.map(function(item, index, array){
return item * 2;
});
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item, index, array){
//执行某些操作
});
8.归并
reduce() 从数组的第一项开始
reduceRight() 从数组的最后一项开始
这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。传给 reduce() 和 reduceRight() 的函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。
例子:(使用 reduce() 还是 reduceRight() ,主要取决于要从哪头开始遍历数组)
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15
var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15