携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情
数组的遍历方法(续)
map()
这个和filter()方法有着本质的区别,这个方法返回的是每个数组元素经过function回调函数运行之后返回的结果,返回的是新数组,并不是原数组中的元素,而且也不会改变原数组的内容,如:
var array1 = [1, 5, 2, 8, 4, 6, 3, 7];
var array2 = array1.map(function (content) {
return ++content;//让每个数组元素都+1
});
console.log(JSON.stringify(array2));//[2,6,3,9,5,7,4,8]
console.log(JSON.stringify(array1));//[1,5,2,8,4,6,3,7]
在开发中,我们经常使用这个方法提取数组元素中某一部分,其实也就是相当于经过某个回调函数运行出来的结果,如:
var student = [{ name: '张三', sex: 'boy', heavy: '60' }, { name: '李四', sex: 'girl', heavy: '50' }];
//提取性别
var content1 = student.map(function (element) {
return element.sex;
});
console.log(JSON.stringify(content1));//["boy","girl"]
//改键值对的键
var content2 = student.map(function (element) {
return ({NAME: element.name})
});
console.log(JSON.stringify(content2));//[{"NAME":"张三"},{"NAME":"李四"}]
这种例子在开发中很重要,经常使用,要重点掌握!
forEach()
这里我要提一下,forEach()和map()在某些特殊情况下是能够改变数组的,比如我们在修改数组的某个属性(键值对中的值)时,会改变数组,如:
var student = [{ name: '张三', sex: 'boy', heavy: '60' }, { name: '李四', sex: 'girl', heavy: '50' }];
//修改属性
var l1 = student.map(function (content) {
content.heavy = '80';
});
console.log(JSON.stringify(student));
我们可以清楚的看见heavy属性值已将全部变成了80,这里实际上forEach()的使用方法跟map()完全一样,改变数组也是同上,大家可以自己思考思考。
那有人可能会问了,我们之前说过forEach()不会改变数组,这又是怎么回事呢?实际上这只是一般情况,例如,当我们想要用forEach修改数组元素是基本数据类型的时候👇
这时候function函数中只有content一个参数,无法改变数组元素,那要是function函数中不止一个参数呢?👇
这三个参数缺一不可:
- content: 数组元素
- index: 数组元素索引
- array2: 数组名