数组方法-map
2022-07-12 本文已影响0人
skoll
描述
map方法会给原数组中的每个元素按照顺序调用执行一次callback函数,每次执行后的返回值,组成一个新数组
语法
var new_array = arr.map(function callback(currentValue[, index[, array]]) {
// Return element for new_array
}[, thisArg])
1 .callback:生成新数组元素的函数,使用三个参数
2 .currentValue:数组正在处理的当前元素
3 .index:正在处理的当前元素的索引
4 .array:map方法调用的数组
5 .thisArg:执行callback函数时引用的this
返回:一个由原数组每个元素执行回调函数的结果组成的新数组
细节
1 .callback只会在有值的索引上被调用,那些从来没有被赋过值或者被delete删除的索引不会被调用。
1 .null,undefined,'',这些都会先做隐式转换,所以这里就不搞了,直接ts解决不好么
2 .map实现的一定是生成一个新数组,如果不打算使用返回的新数组,newArr=arr.map(callback),是违反设计初衷的。
1 .如果想要操作原来的数组,使用forEach,for..of
2 .callback也不允许没有返回值
3 .map不会修改原来的数组,虽然可以在callback的时候修改原来的数组
4 .调用map之后在push的数据是不会被执行到的
使用举例
1 .求一组数的平方根
let newArr=arr.map(Math.sqrt)
2 .对原来的一组数进行格式化处理
var kvArray = [{key: 1, value: 10},
{key: 2, value: 20},
{key: 3, value: 30}];
var reformattedArray = kvArray.map(function(obj) {
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});
// reformattedArray 数组为: [{1: 10}, {2: 20}, {3: 30}],
// kvArray 数组未被修改:
// [{key: 1, value: 10},
// {key: 2, value: 20},
// {key: 3, value: 30}]
3 .最关键的就是用的时候想不起来,for操作的优先级在脑海里面太高了