第1类:索引方法indexOf()和lastIndexOf()
这两个方法是判断数组里是否有这个元素(全等比较),有的话返回数组里的下标,没有的话返回-1,它们唯一区别是一个是从前往后找,另一个是从后往前找.
var arr = [1, 7, 5, 7, 1, 3];
console.log(arr.indexOf(7));//1,从前往后找,返回下标
console.log(arr.indexOf('7'));//-1,它会执行全等的方式进行比较.
console.log(arr.lastIndexof(7));//3,返回下标
console.log(arr.indexOf('7'));//-1,它会执行全等的方式进行比较.
第2类:迭代方法forEach(),filter(),map(),some(),every(),reduce()
这五个方法都接收一个函数,函数里有三个参数,数组当前项的值、当前项在数组中的索引、数组对象本身。注意,这几种方法都不会改变原数组。
1.forEach()方法:
遍历数组,跟for …in 基本一样,这个方法写法比较方便,所以如果是遍历数组,推荐用这种方法.
var arr = [1, 7, 5, 7, 1, 3];
arr.forEach(function(v,index,arr){
console.log(v);//得到每一项值
})
forEach()方法规律:就是普通的遍历方法,写法比较简单.
2.filter()方法:过滤数组,里面有一个return 返回一个布尔值,返回一个满足布尔值的新数组.
遍历数组,里面判断数组元素是否满足某个条件,满足的话在函数里面返回出来,最终组成一个新数组.
var arr = [32, 33, 16, 18, 40]
var newArr=arr.filter(v=>{
if(v>18){
return true;
}
})
console.log(newArr);//[32, 33, 40],返回满足条件的新数组.
var arr = [12, 66, 4, 88, 3, 7];
let newArr= arr.filter(v=>{
return v>10;
})
console.log(newArr)//[12, 66, 88]
3.map()方法:有return,操作数组,返回经过处理后的新数组.
遍历数组,返回一个新数组,只不过它是返回数组处理后的新数组.
let arr = [{
name: "佩奇",
male: "不详",
type: '对象'
},
{
name: "路飞",
male: "男",
type: '对象'
},
{
name: "娜美",
male: "女",
type: '对象'
},
{
name: "乔巴",
male: "男",
type: '对象'
},
]
let newArr=arr.map(v=>{
return v.name
})
console.log(newArr);// ["佩奇", "路飞", "娜美", "乔巴"]
let arr2=[1,2,3,4]
let newArr2=arr2.map(v=>(//这里使用了es6里的()返回,所以可以不用return
v*2
))
console.log(newArr2)//[2,4,6,8]
4.some()方法:是否有满足,有字很重要,只要有一项满足就结束返回true,如果全部都不满足返回false,只返回一个布尔值.
判断数组中是否存在(只要一个满足即可)符合条件的元素,将结果返回,返回的不是数组,是布尔值.
let arr = [{
name: "佩奇",
male: "不详",
type: '对象'
},
{
name: "路飞",
male: "不详",
type: '对象'
},
{
name: "娜美",
male: "不详",
type: '对象'
},
{
name: "乔巴",
male: "男",
type: '对象'
},
]
let res = arr.some(v => {
return v.male == '不详'//有,结果是true
})
console.log(res);//true
var arr = [12, 66, 4, 88, 3, 7];
let flag=arr.some(v=>{
console.log(v)
return v>80
})
console.log(flag)//true
5.every()方法:里面有return,判断每个是否都满足条件,找到不满足就结束返回false,如果全部满足才是true
判断数组中是否存在(要求数组中全部项都要满足)符合条件的元素,将结果返回,返回的不是数组,是布尔值.
// es5数组方法补充
let arr = [{
name: "佩奇",
male: "不详",
type: '对象'
},
{
name: "路飞",
male: "不详",
type: '对象'
},
{
name: "娜美",
male: "不详",
type: '对象'
},
{
name: "乔巴",
male: "男",
type: '对象'
},
]
let res2 = arr.every(v => {
return v.male == '不详'
})
console.log(res2);//false 有一个不满足,结果false
6.reduce()方法:参数1是函数,返回处理后的值
用来循环数组,并返回每个元素经过处理后的总结果.
比如:可用来计算数组的和
//reduce:可以拿来计算数组元素之和.
/*
arr.reduce(function(prev, cur, index, arr){
...
}, init)
arr 表示将要处理的原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值。
*/
let arr = [1, 5, 6]
let fn = (prev, cur) => {
// console.log(prev);//10,11,16
// console.log(cur);//1,5,6
// var result=prev + cur
// console.log(result);//11,16,22
return prev + cur
}
let totle = arr.reduce(fn, 10)
// console.log(arr);//[1, 5, 6]原数组不变
console.log(totle);//22
更清晰的案例:
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));//10
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));//15
// expected output: 15