CHALLENGE
const compose = (...fns) => (x) => fns.reduceRight((acc, fn) => fn(acc), x);
const pipe = (...fns) => (x) => fns.reduce((acc, fn) => fn(acc), x);
const double = (x) => x * 2;
const addTen = (x) => x + 10;
const square = (x) => x ** 2;
const negate = (x) => -x;
const transform1 = compose(negate, square, addTen, double);
const transform2 = pipe(double, addTen, square, negate);
const memoize = (fn) => {
const cache = new Map();
return (x) => {
if (!cache.has(x)) cache.set(x, fn(x));
return cache.get(x);
};
};
const memoTransform1 = memoize(transform1);
console.log(transform1(3));
console.log(transform2(3));
console.log(memoTransform1(3) === transform1(3));
What is the output?
Anonymous Quiz
20%
256 -256 true
37%
-256 256 false
22%
-64 -256 true
20%
-256 -256 true
β€1
At ten years old, the βanimate anything from JavaScriptβ library continues to get even better with a new scrambleText effect and auto-grid layout mode for stagger grids. The docs for Anime are truly top-tier and packed with examples.
Julian Garnier
Please open Telegram to view this post
VIEW IN TELEGRAM
β€5π2π₯1π€©1
CHALLENGE
function processData(value) {
let result = "start";
try {
result += " -> try";
if (value === null) throw new TypeError("Null value");
if (value < 0) throw new RangeError("Negative value");
result += " -> success";
return result;
} catch (e) {
result += ` -> catch(${e.constructor.name})`;
return result;
} finally {
result += " -> finally";
console.log(result);
}
}
console.log(processData(null));β€2π1π₯1π€©1
What is the output?
Anonymous Quiz
29%
start -> try -> catch(TypeError) start -> try -> catch(TypeError) -> finally
24%
start -> try -> success -> finally start -> try -> success
36%
start -> try -> catch(TypeError) -> finally start -> try -> catch(TypeError)
11%
start -> try -> finally start -> try -> catch(TypeError)
β€2π₯1π€1
CHALLENGE
function createCounter() {
let count = 0;
return {
increment() { count++; },
decrement() { count--; },
getCount() { return count; },
reset: () => { count = 0; }
};
}
const counter = createCounter();
counter.increment();
counter.increment();
counter.increment();
counter.decrement();
const { getCount, reset } = counter;
console.log(counter.getCount());
reset();
console.log(getCount());
β€2π1
π€2β€1π€©1
CHALLENGE
class Pipeline {
#value;
#log = [];
constructor(value) {
this.#value = value;
}
map(fn) {
this.#value = fn(this.#value);
this.#log.push(`map:${this.#value}`);
return this;
}
filter(fn) {
if (Array.isArray(this.#value)) {
this.#value = this.#value.filter(fn);
this.#log.push(`filter:${this.#value}`);
}
return this;
}
reduce(fn, init) {
if (Array.isArray(this.#value)) {
this.#value = this.#value.reduce(fn, init);
this.#log.push(`reduce:${this.#value}`);
}
return this;
}
result() {
console.log(this.#log.join(' | '));
return this.#value;
}
}
new Pipeline([1, 2, 3, 4, 5, 6])
.filter(n => n % 2 === 0)
.map(arr => arr.map(n => n ** 2))
.reduce((acc, n) => acc + n, 0)
.result();β€3π3π₯1
Volume I of this in-depth guide is now complete with eight chapters of advanced material covering topics like event loop internals, what V8 does, buffer allocation, streams, module resolution, async/await, and the process lifecycle.
Ishtmeet Singh
Please open Telegram to view this post
VIEW IN TELEGRAM
π5β€2π€©2π₯1
CHALLENGE
const name = "Taylor";
const age = 28;
const role = "engineer";
const user = {
name,
age,
role,
greet() {
return `Hi, I'm ${this.name}, age ${this.age}`;
},
get info() {
return `${this.role.toUpperCase()} @ ${this.age}`;
}
};
const { name: userName, info, greet } = user;
console.log(userName);
console.log(info);
console.log(greet.call({ name: "Jordan", age: 35 }));
π₯1
Another mammoth Bun release. Bun.Image is a new built-in image processing API which can replace Sharp in many cases. Bunβs package manager has added a global virtual store (akin to pnpmβs), Bun.serve has experimental HTTP/3 over QUIC support, and fetch gets HTTP/2 and HTTP/3 support. Plus the usual raft of Node.js compatibility improvements.
Jarred Sumner
Please open Telegram to view this post
VIEW IN TELEGRAM
β€4π4π€1
CHALLENGE
const handler = {
get(target, prop, receiver) {
if (prop in target) {
const value = Reflect.get(target, prop, receiver);
return typeof value === "number" ? value * 2 : value;
}
return `Property "${prop}" not found`;
},
set(target, prop, value) {
if (typeof value !== "number") {
throw new TypeError("Only numbers allowed");
}
Reflect.set(target, prop, value ** 2);
return true;
},
has(target, prop) {
return prop.startsWith("_") ? false : prop in target;
},
};
const store = new Proxy({ _secret: 99, score: 5 }, handler);
store.level = 3;
console.log(store.score);
console.log(store.level);
console.log("_secret" in store);
console.log("score" in store);
console.log(store._secret);π₯1
What is the output?
Anonymous Quiz
33%
10 18 false true 198
36%
5 9 false true 198
28%
10 9 false true Property "_secret" not found
3%
10 9 true false 198
CHALLENGE
class Range {
constructor(start, end, step = 1) {
this.start = start;
this.end = end;
this.step = step;
}
[Symbol.iterator]() {
let current = this.start;
const { end, step } = this;
return {
next() {
if (current <= end) {
const value = current;
current += step;
return { value, done: false };
}
return { value: undefined, done: true };
}
};
}
}
const range = new Range(1, 10, 3);
const result = [...range].map(n => n ** 2);
console.log(result);
β€3
What is the output?
Anonymous Quiz
20%
[ 1, 9, 25, 49 ]
55%
[ 1, 16, 49, 100 ]
15%
[ 1, 9, 49 ]
10%
[ 1, 9, 25, 49, 81 ]
β€2π€1
CHALLENGE
const p1 = new Promise((resolve) => {
console.log("A");
resolve("B");
});
const p2 = p1.then((val) => {
console.log(val);
return "C";
});
p2.then((val) => console.log(val));
console.log("D");
β€3π€2