JS从零开始(30)

98 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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));

image.png

我们可以清楚的看见heavy属性值已将全部变成了80,这里实际上forEach()的使用方法跟map()完全一样,改变数组也是同上,大家可以自己思考思考。

那有人可能会问了,我们之前说过forEach()不会改变数组,这又是怎么回事呢?实际上这只是一般情况,例如,当我们想要用forEach修改数组元素是基本数据类型的时候👇

image.png

这时候function函数中只有content一个参数,无法改变数组元素,那要是function函数中不止一个参数呢?👇

image.png

这三个参数缺一不可:

  • content: 数组元素
  • index: 数组元素索引
  • array2: 数组名