1 /*场景1:假定有一个数值数组(A),将A数组中的值以双倍的形式放到B数组 */ 2 var numbers = [1,2,3]; 3 var doubledNumbers = []; 4 5 // es5中的办法 6 for(var i = 0; i < numbers.length; i++){ 7 doubledNumbers.push(numbers[i] * 2); 8 } 9 console.log(doubledNumbers);//数组打印出来 10 11 // es5 中的遍历 12 for(var i = 0; i < doubledNumbers.length; i++){ 13 console.log(doubledNumbers[i]); //把数组中的值一个个打印出来 14 } 15 16 17 // es6 map方法
//map方法里面用到迭代器函数,并用形参来接受numbers数组里面的值,然后返回number*2到我们定义的新数组doubled中。 18 var doubled = numbers.map(function(number){ 19 return number * 2; 20 }) 21 console.log(doubled); 22 23 // es6 forEach遍历 24 doubled.forEach(function(number){ 25 console.log(number); 26 })
1 /* 场景2 :假定有一个对象数组(A),将A数中对象某个属性的值存储到B数组中*/ 2 var cars = [ 3 {model:"Buick",price:"CHEAP"}, 4 {model:"BMW",price:"expensive"} 5 ]; 6 7 var prices = cars.map(function(car){ 8 return car.price; 9 }) 10 console.log(prices);
map
这里的map
不是“地图”的意思,而是指“映射”,也就是原数组被“映射”成对应新数组。[].map();
基本用法跟forEach
方法类似:
callback
的参数也类似:
[].map(function(value, index, array) { // ... });
但是map需要返回值,如果不给,默认返回undefined, map 返回一个新的数组。
使用场景:比如腾讯课堂里面有许多老师的课程,我们要统计所有课程报名人数。怎么办呢?
我们可以把(所有课程)当作一个大的对象,这个对象里面包含许多小的对象-(每个老师的课程)。
每个(老师的课程)这个小对象有(报名人数)这个属性,我们可以用map方法把大对象(所有的课程)中(报名人数)这个属性的值拿出来,然后遍历统计。