2635. 转换数组中的每个元素
2635. 转换数组中的每个元素
题目
Given an integer array arr
and a mapping function fn
, return a new array with a transformation applied to each element.
The returned array should be created such that returnedArray[i] = fn(arr[i], i)
.
Please solve it without the built-in Array.map
method.
Example 1:
Input: arr = [1,2,3], fn = function plusone(n)
Output: [2,3,4]
Explanation:
const newArray = map(arr, plusone); // [2,3,4]
The function increases each value in the array by one.
Example 2:
Input: arr = [1,2,3], fn = function plusI(n, i)
Output: [1,3,5]
Explanation: The function increases each value by the index it resides in.
Example 3:
Input: arr = [10,20,30], fn = function constant()
Output: [42,42,42]
Explanation: The function always returns 42.
Constraints:
0 <= arr.length <= 1000
-10^9 <= arr[i] <= 10^9
fn
returns a number
题目大意
编写一个函数,这个函数接收一个整数数组 arr
和一个映射函数 fn
,通过该映射函数返回一个新的数组。
返回数组的创建语句应为 returnedArray[i] = fn(arr[i], i)
。
请你在不使用内置方法 Array.map
的前提下解决这个问题。
提示:
0 <= arr.length <= 1000
-10^9 <= arr[i] <= 10^9
fn
返回一个数
解题思路
这个问题的本质就是实现一个类似于 JavaScript 内置的 Array.prototype.map
方法,主要考察你对数组遍历以及回调函数的理解。
- 题目要求返回一个新的数组,所以初始化一个新数组,用于存储每次对元素应用函数
fn
后的结果。 - 遍历原数组,对数组中的每个元素调用
fn
,注意将当前元素arr[i]
和当前元素的索引i
作为参数传给fn
。 - 保存每次的结果,将结果存入新数组。
- 所有元素处理完毕后,返回包含结果的新数组。
注意:在 JavaScript 中,
map
和forEach
都是用于遍历数组的方法,区别是:
map
返回一个新数组,其中包含了对原数组的每个元素执行提供的回调函数后生成的新值,原数组不会被修改。forEach
不返回任何值(返回值是undefined
),只是对每个数组元素执行一次提供的回调函数,一般用于执行副作用操作(如修改外部变量或处理 DOM)。但需要注意数组内元素是引用类型的情况:
- 基本类型:
map
和forEach
都不会修改原数组。- 引用类型:如果回调函数修改了对象的属性,那么原数组中的对象会被修改。
复杂度分析
- 时间复杂度:
O(n)
,其中n
是数组的长度。遍历了整个数组,对每个元素调用一次fn
。 - 空间复杂度:
O(n)
,需要一个新的数组来存储转换后的结果。
代码
/**
* @param {number[]} arr
* @param {Function} fn
* @return {number[]}
*/
var map = function (arr, fn) {
let result = [];
for (let i = 0; i < arr.length; i++) {
result.push(fn(arr[i], i));
}
return result;
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 |
---|---|---|---|---|
2626 | 数组归约运算 | [✓] | ||
2631 | 分组 | [✓] | ||
2634 | 过滤数组中的元素 | [✓] |