these are some samples of coding excercises I have resolved in past interviews
See also:
these are some samples of coding excercises I have resolved in past interviews
See also:
/* | |
why fixDate? | |
if we create a JS Date writing: | |
var d = new Date("2015-05-15") | |
we are not specifying any timezone | |
the browser/environment will asume it is UTC+000, | |
and always represent it in user's LOCAL TIMEZONE! | |
so, running in an environment located in a UTC-3 zone, | |
d would actually show 2015-05-14 at 21:00 | |
and may lead to errors. |
const combine = (...fns) => (...args) => fns.reduce((returnValues, fn) => [...returnValues, fn(...args)], []) |
// alternative version using ES6 Array.from | |
const chunkify = (chunkSize, src) => Array.from( | |
{ length: Math.ceil(src.length/chunkSize) }, | |
(_, i) => src.slice(i * chunkSize, i * chunkSize + chunkSize) | |
) |
// @params: N functions that should return an Object | |
// @returns a fn that will pass all arg to all fns and return an Obj with all outputs merged | |
const mergeOutputs = (...fns) => (...args) => fns.reduce((out, fn) => ({ | |
...out, | |
...fn(...args) | |
}), {}) | |
// takes one arg | |
const one = (name) => ({ hello: name, world: name }) |
const loop = { | |
timer: null, | |
count: 0, | |
start(fn, time=1000, limit = 100) { | |
fn(this.stop.bind(this), this.count); | |
this.count++; | |
if (this.count < limit) { | |
this.timer = setTimeout(() => this.start(fn, time, limit), time) | |
} else { | |
this.stop() |
const shallowCompare = (obj1, obj2) => | |
typeof obj1 === 'object' && typeof obj2 === 'object' | |
? Object.keys(obj1).length === Object.keys(obj2).length && | |
Object.keys(obj1).every( | |
key => obj2.hasOwnProperty(key) && obj1[key] === obj2[key] | |
) | |
: obj1 === obj2 | |
const memoizeByProps = (...props) => Component => | |
React.memo(Component, (prevProps, nextProps) => |
// iteration 0 | |
// adding deep diving for key paths | |
// based on getProperty() | |
// try on tddbin.com | |
function copyFrom(obj) { | |
const values = (...keys) => keys.map(k => getProperty(k)(obj)); | |
return { values }; | |
} |
// make a data uri encoded image from a <video> element using canvas | |
// (thank you stackoverflow people) | |
function videoElementToImage(videoElement, width, height) { | |
width = width || 360; | |
height = height || 240; | |
var canvas = document.createElement('canvas'); | |
canvas.width = width; | |
canvas.height = height; | |
var context = canvas.getContext('2d'); | |
context.drawImage(videoElement, 0, 0, canvas.width, canvas.height); |
function getHeader(url, header) { | |
return new Promise(function(resolve, reject) { | |
var http = new XMLHttpRequest(); | |
http.open('HEAD', url); | |
http.onreadystatechange = function() { | |
if (this.readyState !== this.DONE) return; | |
if (this.status != 200) { | |
reject(this.status); | |
} else { |