Я не думаю, что я когда -либо стал более жестким, чем время, когда я выяснил способы манипулировать, изменять и построить массивы и объекты. Это было одно из лучших откровений в моей учебной карьере JS и необходимо для понимания современного JavaScript. Поэтому я подумал, что объясню некоторые из тех, которые я действительно понимаю и использую ежедневно.
Когда вы их используете? Примером макула моей головы является то, что API возвращает объект JSON в определенной структуре, которая не работает с тем, как ваш компонент отображает данные. В этом случае вы получите возвращенные данные API и преобразовываете их с помощью, скажем, карта Чтобы создать новый массив, который подходит вашему компоненту.
КАРТА
За эти годы я смотрел на множество других народов и использование карта большой. Так что же, кроме функции более высокого порядка? Ну карта Процессы над массивом и возвращает новый массив – самый простой ответ, который я могу дать. Он воспринимает функцию обратного вызова в качестве параметра, который сам по себе принимает параметр (я обычно использую с именованием элемента при котором эта стоимость удерживается.
let arr = [3, 6, 9, 12, 15, 18];
arr.map((item, index)=>{
console.log(item * 4) //12, 24, 36, 48, 60, 72
console.log(index) //0, 1, 2, 3, 4, 5
})
Красота функций высшего порядка, таких как их использование, – это чисто функциональное программирование, поэтому вы можете продолжать добавлять другие функции в конце карта например:
let arr = [3, 6, 9, 12, 15, 18];
arr.map((item, index)=>{
console.log(item * 4) //12, 24, 36, 48, 60, 72
console.log(index) //0, 1, 2, 3, 4, 5
}).filter((item)=>{
if (item < 12){ //filters out all numbers that are lower than 12
return false;
} else {
return true;
}
});
Или же Что -то относительно состояния реагирования и сопоставления с новым объектом для дальнейшего использования в рендеринге:
fetch('http://example.com/movies.json')
.then((response)=>{ //Response is [ {id:1, name:First Name}, {id:2, name:Second Name}, {id:3, name:Third Name} ]
this.setState({
fieldsForComponent : response.map((item)=>{
return {
id : item.id,
name : item.name
}
});
});
})
ФИЛЬТР
Мы кратко использовали фильтр функция в примере выше. Что это? Это еще одна функция более высокого порядка, которая фильтрует передачу структуру данных на основе теста, который вы предоставляете в функции обратного вызова. Итак, вы можете использовать его с if..else заявления часто.
let arr = ['aaa', 'bbbb', 'ccccc'];
arr.filter((item, index)=>{
if (item.length < 3){
return true;
} else {
return false;
}
console.log(index); //0, 1, 2
});
Обратный вызов в фильтр Функция принимает параметры Текущий элемент в массиве , Индекс элемента И это также может занять Массив объект, на котором производится фильтр Анкет
ДЛЯ КАЖДОГО
foreach это одна из моих самых используемых функций, когда дело доходит до массивов. На первый взгляд это выглядит так же, как карта За исключением, что карта Создает совершенно новый массив, который вы обычно должны назначить обратно в оригинальный массив, тогда как foreach мутирует существующий массив, изменяя его структуру и значения.
let arr = [5, 10, 15];
arr.forEach((item)=>{
console.log(item * 2); //10, 20, 30
});
console.log(arr); //[10, 20, 30]
Так же, как фильтр foreach принимает как параметры Текущий элемент в массиве , индекс элемента И это также может занять Массив объект, на котором производится петля Анкет
Object.Keys/Object.values
Переход к манипуляциям с объектами на некоторое время – два очень полезных способа доставить объекты туда, где вы их хотите. Object.Keys Полезно, когда вы хотите относиться к своему объекту, как будто это массив, и вы не хотите делать какой -то сложный конвертирующий код, чтобы это произошло. Например: вы хотите использовать карту в структуре данных, но ваша структура является объектом. Вы просто используете Object.keys (yourObject) .map () или Object.keys (yourObject) .filter () Анкет Почему? Потому что это создает массив ваших ключей.
const obj = {
1 : 'somestring',
2 : 42,
3 : false
};
console.log(Object.keys(obj)); //["1", "2", "3"]
Object.values () это то же самое только со значениями объекта.
const obj = {
1 : 'somestring',
2 : 42,
3 : false
};
console.log(Object.keys(obj)); //['somestring', 42, false]
И да оба они возвращают Ключи и Значения в том же порядке, как они написаны в начальном объекте.
Object.Entries
Объединить оба Object.keys () и Object.values () У нас есть Object.Entries () Анкет Это снова возвращает массив, но на этот раз с пары [ключ, значение]. Этот метод не возвращает новый массив в том же порядке, хотя вы должны разобраться в массиве самостоятельно.
const obj = {
1 : 'somestring',
2 : 42,
3 : false
};
console.log(Object.entries(obj)); //[[1, 2, 3], ['somestring', 42, false]] -> ORDER NOT GUARANTEED
Object.assign
Object.assign () использует два объекта и объединяет их вместе. Это был действительно упрощенный ответ, поскольку под капюшоном есть гораздо больше, но, как правило, это целевое решение. У тебя есть цель объект, так что объект, в который вы хотите скопировать, и Источник объект, который является объектом, который скопирован в цель объект.
const obj1 = {1: a, 2: b};
const obj2 = {1: c, 2: d};
const returned = Object.assign(obj1, obj2);
console.log(returned); //{1:a, 2:b, 3:c, 4:d}
Это все сейчас. Я буду расширять этот пост, вероятно, в будущем или возвращаться и исправить ошибки, так как эта тема – то, о чем я многому изучал в течение прошлого года. Цель поста состояла в том, чтобы освежить мою память о том, как эти вещи работают, и, надеюсь, объяснить их простыми терминами для людей, которые пытаются их понять. Я очень рекомендую вам также проверить Mdn Для более подробных объяснений для всех этих функций и методов.
Спасибо за чтение!
Оригинал: “https://dev.to/zasuh_/javascript-higher-order-functions-21lp”