Open ljianshu opened 5 years ago
严格来说,如果数组项是引用类型,forEach
过程中可能会改变原始数组的
let arr = [{ num: 1 }, { num: 2 }, { num: 3 }]
arr.forEach(item => {
if (item.num === 1) {
item.num = 10
}
})
console.log(arr) // [{ num: 10 }, { num: 2 }, { num: 3 }]
您好,您的来信已收到,我会尽快阅读且回复,谢谢!
前言
本文主要介绍数组常见遍历方法:forEach、map、filter、find、every、some、reduce,它们有个共同点:不会改变原始数组。
一、forEach:遍历数组
我们再来看个例子:遍历数组中的值,并计算总和
二、map:将数组映射成另一个数组
map通过指定函数处理数组的每个元素,并返回处理后新的数组,map 不会改变原始数组。
forEach和map的区别在于,forEach没有返回值。 map需要返回值,如果不给return,默认返回undefined
使用场景1 假定有一个数值数组(A),将A数组中的值以双倍的形式放到B数组
使用场景2 假定有一个对象数组(A),将A数中对象某个属性的值存储到B数组中
三、filter:从数组中找出所有符合指定条件的元素
filter() 检测数值元素,并返回符合条件所有元素的数组。 filter() 不会改变原始数组。
使用场景1:假定有一个对象数组(A),获取数组中指定类型的对象放到B数组中
使用场景2:假定有一个对象数组(A),过滤掉不满足以下条件的对象 条件: 蔬菜 数量大于0,价格小于10
使用场景3:假定有两个数组(A,B),根据A中id值,过滤掉B数组不符合的数据
四、find:返回通过测试(函数内判断)的数组的第一个元素的值
它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。 使用场景1 假定有一个对象数组(A),找到符合条件的对象
使用场景2:假定有一个对象数组(A),根据指定对象的条件找到数组中符合条件的对象
五、every&some
every:数组中是否每个元素都满足指定的条件
some:数组中是否有元素满足指定的条件
使用场景1:计算对象数组中每个电脑操作系统是否可用,大于16位操作系统表示可用,否则不可用
一言以蔽之:Some: 一真即真;Every: 一假即假
使用场景2:假定有一个注册页面,判断所有input内容的长度是否大于0
六、reduce:将数组合成一个值
reduce() 方法接收一个方法作为累加器,数组中的每个值(从左至右) 开始合并,最终为一个值。
使用场景1: 计算数组中所有值的总和
使用场景2: 将数组中对象的某个属性抽离到另外一个数组中
使用场景3:判断字符串中括号是否对称