--description--
As you have seen from applying Array.prototype.map()
, or simply map()
earlier, the map
method returns an array of the same length as the one it was called on. It also doesn't alter the original array, as long as its callback function doesn't.
In other words, map
is a pure function, and its output depends solely on its inputs. Plus, it takes another function as its argument.
You might learn a lot about the map
method if you implement your own version of it. It is recommended you use a for
loop or Array.prototype.forEach()
.
--instructions--
Write your own Array.prototype.myMap()
, which should behave exactly like Array.prototype.map()
. You should not use the built-in map
method. The Array
instance can be accessed in the myMap
method using this
.
--hints--
[23, 65, 98, 5, 13].myMap(item => item * 2)
should equal [46, 130, 196, 10, 26]
.
const _test_s = [23, 65, 98, 5, 13];
const _callback = item => item * 2;
assert(JSON.stringify(_test_s.map(_callback)) === JSON.stringify(_test_s.myMap(_callback)));
["naomi", "quincy", "camperbot"].myMap(element => element.toUpperCase())
should return ["NAOMI", "QUINCY", "CAMPERBOT"]
.
const _test_s = ["naomi", "quincy", "camperbot"];
const _callback = element => element.toUpperCase();
assert(JSON.stringify(_test_s.map(_callback)) === JSON.stringify(_test_s.myMap(_callback)));
[1, 1, 2, 5, 2].myMap((element, index, array) => array[index + 1] || array[0])
should return [1, 2, 5, 2, 1]
.
const _test_s = [1, 1, 2, 5, 2];
const _callback = (element, index, array) => array[index + 1] || array[0];
assert(JSON.stringify(_test_s.map(_callback)) === JSON.stringify(_test_s.myMap(_callback)));
Your code should not use the map
method.
assert(!__helpers.removeJSComments(code).match(/\.?[\s\S]*?map/g));
--seed--
--seed-contents--
Array.prototype.myMap = function(callback) {
const newArray = [];
// Only change code below this line
// Only change code above this line
return newArray;
};
--solutions--
Array.prototype.myMap = function(callback) {
const newArray = [];
for (let i = 0; i < this.length; i++) {
newArray.push(callback(this[i], i, this));
}
return newArray;
};
// Test case
const s = [23, 65, 98, 5];
const doubled_s = s.myMap(item => item * 2);