跳至主要內容

2635. 转换数组中的每个元素


2635. 转换数组中的每个元素open in new window

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

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 方法,主要考察你对数组遍历以及回调函数的理解。

  1. 题目要求返回一个新的数组,所以初始化一个新数组,用于存储每次对元素应用函数 fn 后的结果。
  2. 遍历原数组,对数组中的每个元素调用 fn,注意将当前元素 arr[i] 和当前元素的索引 i 作为参数传给 fn
  3. 保存每次的结果,将结果存入新数组。
  4. 所有元素处理完毕后,返回包含结果的新数组。

注意:在 JavaScript 中,mapforEach 都是用于遍历数组的方法,区别是:

  • map 返回一个新数组,其中包含了对原数组的每个元素执行提供的回调函数后生成的新值,原数组不会被修改。
  • forEach 不返回任何值(返回值是 undefined),只是对每个数组元素执行一次提供的回调函数,一般用于执行副作用操作(如修改外部变量或处理 DOM)。

但需要注意数组内元素是引用类型的情况:

  • 基本类型:mapforEach 都不会修改原数组。
  • 引用类型:如果回调函数修改了对象的属性,那么原数组中的对象会被修改。

复杂度分析

  • 时间复杂度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数组归约运算open in new window[✓]
2631分组open in new window[✓]
2634过滤数组中的元素open in new window[✓]