Skip to content

Instantly share code, notes, and snippets.

@shnigi
Last active March 10, 2022 08:14
Show Gist options
  • Save shnigi/ac77b55eb02da88c5e64b4a045c3b412 to your computer and use it in GitHub Desktop.
Save shnigi/ac77b55eb02da88c5e64b4a045c3b412 to your computer and use it in GitHub Desktop.
Lodash vanilla utility - shnigidash
// 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