ES5新增数组常用方法
- indexOf()
跟字符串查找一样,查找指定元素是否存在,如果存在,返回下标,如果不存在返回-1
let arr = [1,2,3,4];
console.log(arr.indexOf(3)); // 2
- lastIndexOf()
跟indexOf()一样,只是查找起始点不同,indexOf是从第一个开始查找,
lastIndexOf()是从最后一个查找,如果存在,返回下标,如果不存在返回-1
let arr = [1,2,3,4];
console.log(arr.indexOf(3)); // 2
- forEach()
跟之前的for()循环一样,只是forEach更灵活,
有两个参数第一个参数是回调函数,第二个参数是控制当前this指向谁
第一个参数(回调函数):function(value, index, arr){};
回调函数内的三个参数分别为:当前循环的值,当前循环的索引,当前数组本身
第二个参数:this
示例:
let arr = [1,2,3,4];
arr.forEach(function(value, index, arr){
console.log(value, index, arr, this);
// 1 0 [1, 2, 3, 4] document(因为第二个参数把this指向了document)
// 2 1 [1, 2, 3, 4] document(因为第二个参数把this指向了document)
// 3 2 [1, 2, 3, 4] document(因为第二个参数把this指向了document)
// 4 3 [1, 2, 3, 4] document(因为第二个参数把this指向了document)
}, document); // 这个this随意指向谁都可以(箭头函数除外)
箭头函数示例:
let arr = [1,2,3,4];
arr.forEach((value, index, arr) => {
console.log(value, index, arr, this);
}, document); // 这里的this指向了window,
// 因为箭头函数的this指向的是当前函数所在的对象
- map()
map()方法返回一个被操作后的新数组,不会改变原数组
map()一般配合return使用,如果没有return那跟forEach一样;
示例:
let arr = [
{name:"yang", age:18, like:"sport"},
{name:"wang", age:28, like:"sleep"},
{name:"ling", age:38, like:"eat"}
]
let newArr = arr.map(function(value, index, arr){
let json = {};
json.n = value.name;
json.a = value.age;
json.l = value.like;
return json;
})
console.log(newArr);
/* 输出:
[
{n: "yang", a: 18, l: "sport"}
{n: "wang", a: 28, l: "sleep"}
{n: "ling", a: 38, l: "eat"}
]
*/
- filter()
过滤,过滤不符合条件的元素,如果回调函数返回true则保留,返回false则过滤掉
示例:
let arr = [
{name:"yang", age:18, like:"sport"},
{name:"wang", age:28, like:"sleep"},
{name:"ling", age:38, like:"eat"}
]
let newArr = arr.filter(function(value, index, arr){
return value.name == "yang"; // 返回name = "yang"的元素,过滤掉不符合的
})
console.log(newArr); // {name: "yang", age: 18, like: "sport"}
- some()
判断数组内是否有指定元素,如果只要有一个则返回true,如果一个都没有则返回false
some()和every()相对;
some()是数组内只要有一个满足条件则返回true,一个都没有返回false
every()是数组内全部满足条件则返回true,否则返回flase
示例:
let arr = [
{name:"yang", age:18, like:"sport"},
{name:"ling", age:38, like:"eat"}
]
let result = arr.some(function(value, index, arr){
return value.name == "yang";
});
console.log(result) // ture
- every()
判断数组内是否都有指定元素,如果全部都有则返回true,
如果有一个没有指定元素则返回false
some()和every()相对;
some()是数组内只要有一个满足条件则返回true,一个都没有返回false
every()是数组内全部满足条件则返回true,否则返回flase
示例:
let arr = [
{name:"yang", age:18, like:"sport"},
{name:"yang", age:38, like:"eat"}
]
let result = arr.every(function(value, index, arr){
return value.name == "yang";
});
console.log(result) // ture
- reduce()
reduce()回调函数有四个参数,
第一个参数为:之前计算过的值,
第二参数为:之前计算过的值的下一个值
第三个参数:当前索引
第四个参数为:当前数组对象
类似递归,可以求和之类的操作
reduce()和reduceRight()类似,只是执行方向不同,
reduce()从数组的开头往后递归
reduceRight()从数组的末尾往前递归
示例:
let arr = [1,2,3];
let result = arr.reduce(function(prev, next, index, arr){
return prev + next;
})
console.log(result) // 6
- reduceRight()
reduceRight()和reduce()类似,只是执行方向不同,
reduceRight()从数组的末尾往前递归
reduce()从数组的开头往后递归