转换数组中的每个元素

187 阅读2分钟

前言:锻炼自己的思想,规范自己的编程思路。每天一道算法题,督促自己。

靡不有初,鲜克有终,加油坚持下去。

问题:编写一个函数,这个函数接收一个整数数组 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);
};

执行结果如下图:

执行时间还是不错的,这个题也是一遍过😄

image-20230430212756174.png

结论:因为昨天学了forEach(),今天看到这个题的时候,我马上就想到了使用forEach()循环,但是有些忘记怎么写了,就去看了昨天写的代码,因为昨天的forEach变量名最后修改版本是没有提交的,我发现了竟然有一个变量名没有改完,更正过来的就重新提交了,做事还是要仔细呀,马马虎虎不成样子😰