JavaScript中的遍历
forEach、filter、map、some、every、find、findIndex、reduce
有如下一排同学
let students = [
{ id: 001, name: "张三", weight: 50 },
{ id: 002, name: "李四", weight: 48 },
{ id: 003, name: "王五", weight: 57 },
{ id: 004, name: "赵六", weight: 52 },
{ id: 005, name: "孙七", weight: 46 }
];
他们的体重记录为一个数组
let w = [50,48,57,52,46]
批量操作
他们一起吃了饭后,体重增加了
使用forEach方法
students.forEach(student => {
student.weight += 2;
});
使用map方法也可以
students.map(student => {
student.weight += 2;
});
map还可以把重量更新后返回
w = students.map(student => {
return (student.weight += 2);
});
console.log(w); // [ 52, 50, 59, 54, 48 ]
forEach和map的最大区别就在于,forEach没有返回值
筛选过滤
使用filter选出体重大于50的让他们去锻炼
let run = students.filter(student => {
return student.weight > 50;
});
console.log(run);
/*
[
{ id: 3, name: '王五', weight: 57 },
{ id: 4, name: '赵六', weight: 52 }
]
*/
有符合
有没有体重小于50的
当只需要判断数组中有没有符合条件的时候(一个就行) 就需要我们的some方法登场了
只要找到一个符合条件的,就回来报告true 所以并不会全部遍历,不做多余的活(性能优良)
let s = students.some(student => {
return student.weight < 50;
});
console.log(s); // true
全符合
判断体重是否全部小于50
every对每一个元素执行一个callback,直到它找到一个使 callback 返回 false的元素,就返回false,直到遍历完成也没有返回false的话,就返回true
let s = students.every(student => {
return student.weight < 50;
});
console.log(s); // false
返回一个符合的
找一个体重大于55的同学
可使用find
find和some很类似,都是寻找符合条件的,有一个就可以 不过some返回(true),而find则(返回第一个符合条件的对象)
let s = students.find(student => {
return student.weight > 55
})
console.log(s); // { id: 3, name: '王五', weight: 57 }
返回序号
找出id为003的同学的排列下标
findIndex返回第一个符合条件的索引号
let i = students.findIndex(student => {
return student.id === 003
})
console.log(i); // 2
递归累加
所有同学体重加起来多少呢
reduce()方法接收一个回调函数作为第一个参数,回调函数又接受四个参数,分别是;
1、previousValue =>初始值或上一次回调函数叠加的值;
2、currentValue => 本次回调(循环)将要执行的值;
3、index=>“currentValue”的索引值;
4、arr => 数组本身;
reduce()方法返回的是最后一次调用回调函数的返回值;
// 对象数组
let sum = students.reduce((sum, student) => {
return student.weight + sum;
}, 0);
console.log(sum); // 253
// 数组
let sum = w.reduce((sum, weight) => {
return weight + sum;
}, 0);
console.log(sum); // 253
以上就是js的常用遍历方法。