JavaScript中提供了多种数组方法,如下:
indexOf()方法跟lastIndexOf()方法都接受两个参数,要查找的项跟查找起点位置的索引(可选)。其中indexOf()方法从开头(索引为0)的位置往后找,而lastIndexOf()方法从末尾开始向前找。
在比较第一个参数与数组中的每一项时是使用全等操作符进行严格比较的,若没有找到则返回-1。
具体看下面例子:
var numbers = [1,2,3,4,5,4,3,2,1];
console.log(numbers.indexOf(4)); //3
console.log(numbers.lastIndexOf(4)); //5
console.log(numbers.indexOf(4,4)); //5
console.log(numbers.lastIndexOf(4,4)); //3
var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
console.log(people.indexOf(person)); //-1
console.log(morePeople.indexOf(person)); //0
console.log(morePeople);
迭代方法:
ECMAScript 5
为数组定义了五个迭代方法,每种方法接受两个参数,要在每一项上运行的函数跟运行该函数的作用对象--影响this的值(可选),而传入这些方法的函数要接收三个参数:数组项的值,该项在数组中的位置和数组对象本身。
①:every()方法对数组中的每一项运行给定的函数,如果该函数对一项都返回true,则返回true。(相当于逻辑与)
②:filter()方法对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组。
③:forEach()方法对数组中的每一项运行给定的函数,没有返回值。
④:map()方法对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。
⑤: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);
})
console.log(everyResult); // false
var filterResult = numbers.filter(function(item, index, array) {
return (item>2);
})
console.log(filterResult); // 3,4,5,4,3
var forEachResult = numbers.forEach(function(item, index, array) {
//执行具体操作,无返回值
})
var mapResult = numbers.map(function(item, index, array) {
return item*2;
})
console.log(mapResult); // 2,4,6,8,10,8,6,4,2
var someResult = numbers.some(function(item, index, array) {
return (item>2);
})
console.log(someResult); // true
归并方法:
ECMAScript5新增了两个归并数组的方法:reduce()和reduceRight()方法,这两个方法都会迭代数组的所有项,构建一个最终返回的值。
这两个方法接收两个参数:一个在每一项上调用的函数和(可选)作为归并 基础的初始值。
而作为参数的函数接收四个参数:前一个值、当前值、项的索引值、数组对象,并且这个函数的任何返回值都会作为该函数的第一个参数自动传给下一项。
具体看下面例子:
var numbers = [1,2,3,4,5];
var sum = numbers.reduce(function(pre, cur, index, array) {
return pre + cur;
});
console.log(sum); // 15
而reduceRight()方法的作用类似,只是方向相反,具体看下面例子:
var numbers = [1,2,3,4,5];
var sum = numbers.reduceRight(function(pre, cur, index, array) {
return pre + cur;
});
console.log(sum); // 15