Last active
August 23, 2023 07:19
-
-
Save AlanJereb/2695958c85284054998e7ba4d29bb941 to your computer and use it in GitHub Desktop.
ForEach, Filter and Map implemented using Reduce [typesafe]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const testArray = [1, 2, 3]; | |
// ---- | |
// MAP | |
// ---- | |
const customMap = <T extends unknown>(arr: T[], callback: (value: T) => T) => { | |
return arr.reduce((mapped: T[], current) => { | |
mapped.push(callback(current)) | |
return mapped | |
}, []) | |
} | |
// test | |
console.log(customMap(testArray, (val) => val * 2)); | |
// ---- | |
// FILTER | |
// ---- | |
const customFilter = <T extends unknown>(arr: T[], callback: (value: T) => boolean) => { | |
return arr.reduce((filtered: T[], current) => { | |
if (callback(current)) { | |
filtered.push(current); | |
} | |
return filtered; | |
}, []) | |
} | |
// test | |
console.log(customFilter(testArray, (val) => val === 2)); | |
// ---- | |
// FOREACH | |
// ---- | |
const customForEach = <T extends unknown>(arr: T[], callback: (value: T) => void) => { | |
return arr.reduce((_, current) => { | |
callback(current); | |
return _; | |
}, null) | |
} | |
// test | |
customForEach(testArray, (val) => console.log("This is: " + val)); | |
// ---- | |
You can test the outputs here: https://www.typescriptlang.org/play?ssl=38&ssc=1&pln=1&pc=1#code/MYewdgzgLgBFCm0CCAnFBDAnjAvDA2gIwA0MATKQMwC6A3AFAD0jMAtO60ywLJIAKXNh3qhIsYAFdoIALbd0AB1wwAPABUY8AB4IwAEwgwJYANZgQAdzAA+ABTo0ALhhr81UsHQAbLwCN0wCbOtgBu3hLwzmoAlLjWLrE48QDe9DAwKPBQEihgMA4oAHSZehLA8La2MooK8HpRbh45mWBQiSlp6TDVCrV6hQpSABa2nj7+gaPN8K3R0Z3pmdm53TV1nQC+pG7zG4II0CLgECBe8IVeIADmU9JyirYHUKgYmKSh3u0wYV4wAFTkOYMZhCdiCABiAEkADJqACiACVBBxOKJoDBJHdwQBLLwIFDKdSaHQzAxGUzmKx2AoNdwY7x+AJBGAfLwRKJfXwgU7wdBgL6pRZZHJ5ArFOplCq2ABmuPxdVpTTQMzacRggq62OlLLGjMmkmVs1iGq6MFlePgJQGwymhraDFNe1NSxFZrllrqDpgWwI1F2+0QUCOkB5F2utygshxFpQj0DLyw7x+Xx+uBweDIQORwhB4IA8gi4UgAMIACWzYLR4ikkZk4JAKDhASGhI02l0ZOMZksNnsThcjXp4yZwR+7ISapCIGxegFnRdKzFJUllQA+kqWqqkuqFkO9SZbZvol6hcs8quvT6wBIfP6QU8RDWow2m8ARk8E28Wcm1WjQ5cbgAIjUIZsUMMDnEAmAAGpvk+Y8K04IA | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment