Last active
March 10, 2022 08:14
-
-
Save shnigi/ac77b55eb02da88c5e64b4a045c3b412 to your computer and use it in GitHub Desktop.
Lodash vanilla utility - shnigidash
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
// UTILITY | |
const cars = [ | |
{ type: 'mazda', driven: 14020, active: true }, | |
{ type: 'volvo', driven: 404324, active: false }, | |
{ type: 'nissan', driven: 135223, active: true } | |
]; | |
// MAP FUNCTIONS | |
const shnigimap = (arr, mapfunc) => { | |
const resultArray = []; | |
for (let i = 0; i < arr.length; i++) { | |
const result = mapfunc(arr[i]) | |
resultArray.push(result); | |
} | |
return resultArray; | |
}; | |
Array.prototype.shnigimap = function(mapfunc) { | |
console.log(this) | |
const resultArray = []; | |
for (let i = 0; i < this.length; i++) { | |
const result = mapfunc(this[i]) | |
resultArray.push(result); | |
} | |
return resultArray; | |
}; | |
//console.log('map example: ', shnigimap([1,2,3,4], num => num * 2)); | |
//console.log('map example 2: ', [1,2,3,4].shnigimap(num => num * 4)); | |
// FILTER FUNCTIONS | |
const shnigifilter = (arr, filterfunc) => { | |
const resultArray = []; | |
for (let i = 0; i < arr.length; i++) { | |
const result = filterfunc(arr[i]); | |
if (result) resultArray.push(arr[i]); | |
} | |
return resultArray; | |
}; | |
Array.prototype.shnigifilter = function(filterfunc) { | |
const resultArray = []; | |
for (let i = 0; i < this.length; i++) { | |
const result = filterfunc(this[i]); | |
if (result) resultArray.push(this[i]); | |
} | |
return resultArray; | |
}; | |
//console.log('filter example: ', shnigifilter([1,2,3,4,5,6,7,8], num => num < 5)); | |
//console.log('filter example 2: ', [1,2,3,4,5,6,7,8].shnigifilter(num => num <= 2)); | |
// REDUCE FUNCTIONS | |
const shnigireduce = (arr, reducer, initialValue) => { | |
let accumulator = initialValue ?? 0; | |
for (let i = 0; i < arr.length; i++) { | |
accumulator = reducer(accumulator, arr[i]); | |
} | |
return accumulator; | |
}; | |
Array.prototype.shnigireduce = function(reducer, initialValue){ | |
let accumulator = initialValue ?? 0; | |
for (let i = 0; i < this.length; i++) { | |
accumulator = reducer(accumulator, this[i]); | |
} | |
return accumulator; | |
}; | |
// console.log('Reduce example: ', shnigireduce([1,2,3,4], (acc, val) => acc + val, 5)); | |
// console.log('Reduce example: ', [1,2,3,4].shnigireduce((acc, val) => acc + val, 5)); | |
// console.log('Reduce example 2: ', cars.shnigireduce((acc, val) => val.driven + acc)); | |
// FIND FUNCTIONS | |
const findItem = (arr, findfunc) => { | |
for (let i = 0; i < arr.length; i++) { | |
const result = findfunc(arr[i]); | |
if (result) { | |
return arr[i]; | |
} | |
} | |
return undefined; | |
}; | |
const findObject = (arr, object) => { | |
const objectEntries = Object.entries(object); | |
for (let i = 0; i < arr.length; i++) { | |
let counter = 0; | |
for (let o = 0; o < objectEntries.length; o++) { | |
const [key, value] = objectEntries[o]; | |
if (arr[i][key] === value) { | |
counter++; | |
} | |
} | |
if (counter === objectEntries.length) { | |
return arr[i]; | |
} | |
} | |
return null; | |
}; | |
const shnigifind = (arr, find) => { | |
if (typeof find === 'function') { | |
return findItem(arr, find); | |
} else if (typeof find === 'object') { | |
return findObject(arr, find); | |
} | |
}; | |
// shnigifind(cars, { type: 'mazda', active: true }) | |
// console.log('find example 1: ', shnigifind(cars, car => car.type === 'volvo')); | |
// console.log('find example 2: ', shnigifind(cars, { type: 'volvo', active: false })); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment