列表

详情


2804. 数组原型的 forEach 方法

编写一个数组方法 forEach,使其可以在任何数组上调用 array.forEach(callback, context) 方法,它将在数组的每个元素上执行回调函数。forEach 方法不应该返回任何内容。

回调函数 callback 接受以下参数:

上下文 context 应该是作为函数上下文参数传递给回调函数 callback 的对象,确保回调函数 callback 内部的 this 关键字引用此上下文对象。

尝试在不使用内置数组方法的情况下实现这个方法。

 

示例 1:

输入:
arr = [1,2,3], 
callback = (val, i, arr) => arr[i] = val * 2, 
context = {"context":true}
输出:[2,4,6]
解释:
arr.forEach(callback, context)  
console.log(arr) // [2,4,6]

回调函数在数组的每个元素上执行。

示例 2:

输入:
arr = [true, true, false, false], 
callback = (val, i, arr) => arr[i] = this, 
context = {"context": false}
输出:[{"context":false},{"context":false},{"context":false},{"context":false}]
解释:
arr.forEach(callback, context) 
console.log(arr) // [{"context":false},{"context":false},{"context":false},{"context":false}]

回调函数在数组的每个元素上以正确的上下文执行。

示例 3:

输入:
arr = [true, true, false, false], 
callback = (val, i, arr) => arr[i] = !val, 
context = {"context": 5}
输出:[false,false,true,true]

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * @param {Function} callback * @param {Object} context * @return {void} */ Array.prototype.forEach = function(callback, context) { } /** * const arr = [1,2,3]; * const callback = (val, i, arr) => arr[i] = val * 2; * const context = {"context":true}; * * arr.forEach(callback, context)  * * console.log(arr) // [2,4,6] */

javascript 解法, 执行用时: 128 ms, 内存消耗: 63.2 MB, 提交时间: 2023-10-15 13:27:58

/**
 * @param {Function} callback
 * @param {Object} context
 * @return {void}
 */
Array.prototype.forEach = function(callback, context) {
  callback = callback.bind(context)
  for (let [index, item] of this.entries()) {
    callback(item, index, this)
  }
}


/**
 *  const arr = [1,2,3];
 *  const callback = (val, i, arr) => arr[i] = val * 2;
 *  const context = {"context":true};
 *
 *  arr.forEach(callback, context)  
 *
 *  console.log(arr) // [2,4,6]
 */

typescript 解法, 执行用时: 136 ms, 内存消耗: 70.5 MB, 提交时间: 2023-10-15 13:27:31

type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue };
type Callback = (currentValue: JSONValue, index: number, array: JSONValue[]) => any
type Context = Record<string, JSONValue>

Array.prototype.forEach = function(callback: Function, context: any): void {
  Array.from(this,(val,i)=>{
     return callback.call(context,val,i,this)
 })

// 或者
//  for (let i = 0; i < this.length; i++) {
//     callback.call(context, this[i], i, this);
//   }
}


/**
 *  const arr = [1,2,3];
 *  const callback = (val, i, arr) => arr[i] = val * 2;
 *  const context = {"context":true};
 *
 *  arr.forEach(callback, context)  
 *
 *  console.log(arr) // [2,4,6]
 */

javascript 解法, 执行用时: 108 ms, 内存消耗: 56.5 MB, 提交时间: 2023-10-15 13:26:53

/**
 * @param {Function} callback
 * @param {Object} context
 * @return {void}
 */
Array.prototype.forEach = function(callback, context) {
    for(let i = 0;i < this.length;i++){
        callback.apply(context,[this[i],i,this])
    }
}

/**
 *  const arr = [1,2,3];
 *  const callback = (val, i, arr) => arr[i] = val * 2;
 *  const context = {"context":true};
 *
 *  arr.forEach(callback, context)  
 *
 *  console.log(arr) // [2,4,6]
 */

上一题