JavaScript

Здравствуйте. Уважаемые программисты, подскажите, как отобразить Map и Filter в нотивном виде, JavaScript?

Я понимаю, что это циклы, но вот не совсем разобрался. Спасибо.
Array.prototype.filter = function(callback, thisArg) {
const self = thisArg || this;
const results = [];

for (let i = 0; i < this.length; ++i) {
if (callback.call(self, this[i], i, this)) {
results.push(this[i]);
}
}

return results;
};

Array.prototype.map = function(callback, thisArg) {
const self = thisArg || this;
const results = [];

for (let i = 0; i < this.length; ++i) {
results.push(callback.call(self, this[i], i, this));
}

return results;
}
Александр Балым
Александр Балым
162
Лучший ответ
"нОтивный" - это какой?)

Под отобразить ты что имеешь ввиду, вывести в консоль? Также, как результат любой другой функции:

var a = [1,2,3,5,6,7,8];
console.log( a.filter(function(x){ return x % 2 == 0; }) ); // выведет все чётные в виде массива, т. е. [2, 6, 8]
console.log( a.map(function(x){ return x*3; }) ); // выведет массив, умноженный на 3, т. е. [3, 6, 9, 15, 18, 21, 24]
Вова .
Вова .
96 095
Оба метода в общих чертах эквивалентны такому хелперу:
function processArray(arr, someFunc) {
 const result = [];
 for (let idx in arr)
  result.push(someFunc(arr[idx], idx, arr));
 return result;
}
Это по сути map.
В случае filter, до push просто добавляется проверка результата someFunc... ну и пушить соответственно нужно уже arr[idx], а не результат функции. В случае reduce, добавляется переменная-коллектор, ничего не пушится, возвращается переменная. Ну и так далее, любой перебирающий метод Array можно на этом паттерне построить.
Хз в чем тут можно не разобраться.