Witam,
mam oto sobie dwie funkcje wyższego rzędu wewnątrz funkcji reduce() oraz forEach():
et studentsList = [new Student('Maya', 200, 'West'),
new Student('Thomas', 150, 'West'),
new Student('Graham', 175, 'East'),
new Student('Taylor', 160, 'East'),
new Student('Phoebe', 190, 'West'),
new Student('Nathan', 190, 'West')];
let studentsPoints = studentsList.reduce((arr, currentObj) => arr.concat(currentObj.points), []); //z concat() - [200, 150, 175, 160, 190, 190]
//z push() - TypeError
// -------------------------------------------------
let posts = [
{title: 'Post One', content: 'Why JavaScript?'},
{title: 'Post Two', content: 'JavaScript for beginners'},
{title: 'Post Three', content: 'First project in JavaScript'},
{title: 'Post Four', content: 'Async JavaScript'},
];
setTimeout(() => {
let output = [];
posts.forEach(post => {
output.push(post.title);
})
console.log(output); //z push() - ["Post One", "Post Two", "Post Three", "Post Four"]
}, 2000); //z concat() - []
Jak widać, obie funkcje wyższego rzędu mają zwrócić tablicę z konkretnymi właściwościami obiektów znajdujących się wewnątrz tablic o scopie globalnym. Problem w tym, że z jakiegoś powodu funkcja wewnątrz reduce() dokleja elementy do tablicy studentsPoints tylko z użyciem metody concat() - przy zastosowaniu zwykłego push() konsola zwraca TypeError. Odwrotnie jest w przypadku drugiego przykładu - zastosowanie wewnątrz funkcji forEach() metody concat() zwraca pustą tablicę, a użycie push() działa poprawnie.
Dlaczego działa to w taki sposób i czy ktoś może polecić przystępne źródła wiedzy o funkcjach high order?
Z góry dziękuję.