Итак, я пытаюсь создать метод, который точно имитирует то, что делает метод Array.prototype.map()
, и есть много вещей, в которых я запутался.
Основная проблема, я полагаю, сводится к его синтаксису. Я знаю, что есть много разных способов использовать метод map
, например:
пример 1:
допустим, у меня есть массив объектов -
var movieList = [
{"Title" : "Inception",
"Awards" : "4 oscars",
"Language" : "English",
"imdbRating" : "8.8"
},
{"Title" : "Inception2",
"Awards" : "44 oscars",
"Language" : "English and Spanish",
"imdbRating" : "9.8"
},
{"Title" : "Interstellar",
"Awards" : "10 oscars",
"Language" : "English",
"imdbRating" : "9.5"
}
];
Допустим, я хочу создать функцию, которая возвращает список объектов, который содержит только название фильма и его imdbRating. В этом случае я могу использовать метод map()
:
let newList = movieList.map( (current) ({'title': current['Title'],
'rating': current['imdbRating'] }) );
приведенная выше строка кода удовлетворяет тому, что мне нужно для достижения моей цели с помощью метода map. Тем не менее, синтаксис может быть другим для других случаев
пример 2:
let s = [1, 2, 3, 4];
let s2 = s.map( function(item) {
return item*2;
});
использование функции карты s2 вернет массив, который для каждого элемента удваивает значение каждого элемента в массиве s.
Теперь, возвращаясь к теме этого поста, проблема, над которой я работаю, дала мне набросок для начала:
Array.prototype.myMap = function(callback) {
let newArray = [];
Я понимаю, что когда массив вызывает метод myMap
, он вставляет 2 аргумента: массив и функцию. Но я не могу понять, как конкретно назначить значение каждой функции обратного вызова в элементе для newArray
в методе myMap
. Тем более, что я не знаю, как получить доступ к исходному массиву.
Одна из моих попыток, которую я знаю, смешна, потому что я не знаю, как получить доступ к длине массива, а также к самому массиву, который вызывает метод myMap
-
Array.prototype.myMap = function(callback) {
let newArray = [];
let x = this.length();
for(let i=0; i<x; i++){
let counter = callback();
newArray.push(counter);
}
return newArray;
};
То, как я до сих пор понимал метод map()
, состоит в том, что он принимает 3 аргумента, массив, функцию и элемент, который будет помещен через функцию, и я недостаточно хорошо знаю синтаксис для итерации За массив, который вызывает метод map
, и нигде в моем курсе меня не учили, как это сделать, и я не нашел ни одного онлайн-ресурса, который бы предлагал решение этой проблемы.