Sunny-117 / js-challenges

✨✨✨ Challenge your JavaScript programming limits step by step

Home Page:https://juejin.cn/column/7244788137410560055

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Array.prototype.map

Sunny-117 opened this issue · comments

commented
const arr = [1, 2, 3]
Array.prototype.map = function (callback) {
    const res = [];
    for (let i = 0; i < this.length; i++) {
        res.push(callback(this[i], i, this))
    }
    return res;
}
const res = arr.map((ele, index, arr) => {
    return ele * 2
})
console.log(res)
Array.prototype._map = function (cb, thisBinding) {
  // 排除回调非函数情况
  if (typeof cb !== "function") {
    throw new TypeError(`${cb} is not a function`);
  }
  // 排除this为非可迭代对象情况
  if (this == null || typeof this[Symbol.iterator] !== "function") {
    throw new TypeError(`${this} is not a iterable`);
  }
  // 将可迭代对象转换成数组
  const array = [...this];
  const result = [];
  // 执行遍历并回调
  for (let i = 0; i < array.length; i++) {
    result.push(cb.call(thisBinding, array[i], i, this));
  }
  return result;
};
Array.prototype._map = function (callback, objThis) {
	if (typeof callback !== "function") {
		throw new TypeError("callback type error!");
	}

	const res = [];
	for (let i = 0; i < this.length; ++i) {
		res.push(callback.call(objThis, this[i], i, this));
	}
	return res;
};
Array.prototype.myMap = function (cb) {
  const newArr = []
  for (let i = 0, len = this.length; i < len; i++) {
    newArr.push(cb(this[i], i, this))
  }
  return newArr
}
commented
Array.prototype.map = function (callback) {
  const res = [];
  for (let i = 0; i < this.length; i++) {
    res.push(callback(this[i], i, this));
  }
  return res;
};
Array.prototype.map = function(callback, thisArg) {
  var result = [];
  for (var i = 0; i < this.length; i++) {
    result.push(callback.call(thisArg, this[i], i, this));
  }
  return result;
}
Array.prototype._map = function (cb) {
    let res = []
    if (Array.isArray(this)) return
    for (let i = 0; i <= this.length; i++) {
        res.push(cb(this[i], i, this))
    }
    return res
}
commented
Array.prototype.mymap = function (callback, thisArg) {
  const res = [];
  for (let i = 0; i < this.length; i++) {
    res.push(callback.call(thisArg, this[i], i, this));
    //回调函数默认的this为undefined,thisArg作为回调函数的this
  }
  return res;
};
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
console.log(
  arr1.mymap(function (item, index, arr) {
    return 2 * this[index];
  }, arr2)
); //[ 8, 10, 12 ]
Array.prototype.map = function (cb) {
  const res = []
  for (let i = 0; i < this.length; i++) {
    res.push(cb(this[i], i, this))
  }
  return res
}
let arr = [1, 2, 3]
let res = arr.map((item, index, arr) => {
  return item + 1
})
console.log(res);
Array.prototype._map = function(cb) {
  const result = [];
  for(let i=0; i<this.length; i++) {
    result.push(cb(this[i], i, this))
  }
  return result;
}
commented
Array.prototype.Map = function (fn) {
                let res = [];
                this.forEach(function (val, key) {
                    res.push(fn(val, key));
                });
                return res;
            };