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;
}
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;
}
"нОтивный" - это какой?)
Под отобразить ты что имеешь ввиду, вывести в консоль? Также, как результат любой другой функции:
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]
Под отобразить ты что имеешь ввиду, вывести в консоль? Также, как результат любой другой функции:
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]
Оба метода в общих чертах эквивалентны такому хелперу:
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 можно на этом паттерне построить.
Хз в чем тут можно не разобраться.
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 можно на этом паттерне построить.
Хз в чем тут можно не разобраться.
Похожие вопросы
- Уважаемые программисты, подскажите новичку. Не обладаю математическим мышлением, к сожалению. Какая функция у переменной?
- Чем отличается filter от map? Не вижу разницы
- Какие программисты более востребованы - PHP или JavaScript?
- Стать Junior программистом на JavaScript за пол года с 0?
- Подскажите книги для изучения javascript? Хочу начать изучать веб программирование javascript подойтет для начала?
- Знатоки, ответьте пожалуйста ответ на общий вопрос про Set & Map
- Javascript программисты, кто поможет решить?
- Есть ли аналоги JavaScript?
- С чего начать учить JavaScript?
- Зачем нужен prototype в JavaScript?