前言:锻炼自己的思想,规范自己的编程思路。每天一道算法题,督促自己。
靡不有初,鲜克有终,加油坚持下去。
问题:编写一个函数,这个函数接收一个整数数组 arr 和一个映射函数 fn ,通过该映射函数返回一个新的数组。
返回数组的创建语句应为 returnedArray[i] = fn(arr[i], i) 。
请你在不使用内置方法 Array.map 的前提下解决这个问题。
示例:(放代码里面)
示例1:
输入:arr = [1,2,3], fn = function plusone(n) { return n + 1; }
输出:[2,3,4]
解释:
const newArray = map(arr, plusone); // [2,3,4]
此映射函数返回值是将数组中每个元素的值加 1。
示例2:
输入:arr = [10,20,30], fn = function constant() { return 42; }
输出:[42,42,42]
解释:此映射函数返回值恒为 42。
思路:看到这个题,就觉得和昨天写的题有点异曲同工之妙,所以很快便有了思路。
首先需要声明一个新数组去接收处理后的数值,然后用昨天学过的forEach()循环去遍历数组,目的是处理旧数组和隐射函数,然后再push()到新数组中即可。
基于上述思考,代码如下:
/**
* @param {number[]} arr
* @param {Function} fn
* @return {number[]}
*/
var map = function(arr, fn) {
let newArr = []
arr.forEach((item,i) =>{
newArr.push(fn(item,i))
})
return newArr
};
简洁版本:在评论区看到的,借鉴学习一下
array.from()把一个类数组对象或可遍历对象转换成一个真正的数组。
参数:第一个参数为要转换的数据(必选)、第二个参数为function,类似map方法(可选)。
返回值:返回处理后的数据。
var map = function(arr, fn) {
return Array.from(arr, fn);
};
执行结果如下图:
执行时间还是不错的,这个题也是一遍过😄
结论:因为昨天学了forEach(),今天看到这个题的时候,我马上就想到了使用forEach()循环,但是有些忘记怎么写了,就去看了昨天写的代码,因为昨天的forEach变量名最后修改版本是没有提交的,我发现了竟然有一个变量名没有改完,更正过来的就重新提交了,做事还是要仔细呀,马马虎虎不成样子😰