CHALLENGE
const transactions = [
{ type: "credit", amount: 200, category: "salary" },
{ type: "debit", amount: 50, category: "food" },
{ type: "debit", amount: 30, category: "food" },
{ type: "credit", amount: 100, category: "bonus" },
{ type: "debit", amount: 70, category: "transport" },
];
const summary = transactions.reduce((acc, { type, amount, category }) => {
acc.balance += type === "credit" ? amount : -amount;
acc.byCategory[category] = (acc.byCategory[category] ?? 0) + amount;
acc.count[type] = (acc.count[type] ?? 0) + 1;
return acc;
}, { balance: 0, byCategory: {}, count: {} });
console.log(summary.balance);
console.log(JSON.stringify(summary.byCategory));
console.log(JSON.stringify(summary.count));
โค2
โค1๐ค1
Type in a package name and get suggestions of lighter alternatives or Node APIs and code snippets that do the same task. For example: is-number leads to a one-liner, axios turns into fetch, and chalk recommends util.styleText. A neat idea itโd be cool to see grow further.
e18e
Please open Telegram to view this post
VIEW IN TELEGRAM
โค8๐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) {
this.#value = this.#value.reduce(fn, init);
this.#log.push(`reduce:${this.#value}`);
return this;
}
result() {
console.log(this.#log.join(' | '));
return this.#value;
}
}
const output = new Pipeline([1, 2, 3, 4, 5, 6])
.filter(x => x % 2 === 0)
.map(arr => arr.map(x => x ** 2))
.reduce((acc, x) => acc + x, 0)
.result();
console.log(output);โค3๐1
What is the output?
Anonymous Quiz
42%
filter:2,4,6 | map:4,16,36 | reduce:56 56
27%
filter:2,4,6 | map:2,4,6 | reduce:12 12
23%
filter:1,3,5 | map:1,9,25 | reduce:35 35
8%
filter:2,4,6 | map:4,16,36 | reduce:56 0
โค4๐2๐ฅ1
Available for several platforms, including Node, this SDK lets you wield the agentic engine behind Copilot in your own apps (coupled with your own custom-built tools) and it uses an existing Copilot subscription. The getting started tutorial provides a good intro and the cookbook includes some sample apps.
GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
๐5โค4๐ค3๐ฅ2
CHALLENGE
const memoize = (fn) => {
const cache = new Map();
return (...args) => {
const key = JSON.stringify(args);
if (cache.has(key)) {
return cache.get(key);
}
const result = fn(...args);
cache.set(key, result);
return result;
};
};
let callCount = 0;
const expensiveMultiply = memoize((a, b) => {
callCount++;
return a * b;
});
console.log(expensiveMultiply(4, 5));
console.log(expensiveMultiply(4, 5));
console.log(expensiveMultiply(3, 7));
console.log(expensiveMultiply(4, 5));
console.log(`calls: ${callCount}`);
1โค3๐2๐ฅ1
What is the output?
Anonymous Quiz
26%
20 20 21 20 calls: 4
42%
20 20 21 20 calls: 2
22%
20 20 21 20 calls: 3
10%
20 20 21 calls: 2
โค4๐1๐ฅ1
CHALLENGE
class Registry {
static #instances = new Map();
static #count = 0;
static defaultTTL;
static maxSize;
static {
Registry.defaultTTL = 3600;
Registry.maxSize = 100;
Registry.#instances.set("__init__", { ts: 0 });
Registry.#count = Registry.#instances.size;
}
static register(key) {
if (Registry.#count >= Registry.maxSize) return false;
Registry.#instances.set(key, { ts: Registry.defaultTTL });
Registry.#count++;
return true;
}
static info() {
return `count=${Registry.#count}, ttl=${Registry.defaultTTL}, max=${Registry.maxSize}`;
}
}
Registry.register("service-a");
Registry.register("service-b");
console.log(Registry.info());๐ค3โค1๐ฅ1
What is the output?
Anonymous Quiz
20%
count=2, ttl=3600, max=100
31%
count=1, ttl=3600, max=100
26%
count=3, ttl=undefined, max=100
24%
count=3, ttl=3600, max=100
๐ฅ1
One of the yearโs big moves in JS tooling, as told by Evan himself. The company he founded to build Vite, Vitest, Rolldown, Oxc, etc. is joining Cloudflare. Heโs candid about why (monetization is hard). Good news: all projects stay MIT-licensed, and Evan and co remain in charge.
Evan You
Please open Telegram to view this post
VIEW IN TELEGRAM
๐ฅ2โค1๐1
CHALLENGE
const handler = {
get(target, prop, receiver) {
if (prop in target) {
return Reflect.get(target, prop, receiver) * 2;
}
return `missing:${prop}`;
},
set(target, prop, value) {
if (typeof value !== "number") {
throw new TypeError("Only numbers allowed");
}
Reflect.set(target, prop, value + 10);
return true;
},
has(target, prop) {
return prop.startsWith("x") ? false : prop in target;
},
};
const store = new Proxy({ xray: 5, zoom: 8 }, handler);
store.nova = 3;
console.log(store.xray);
console.log(store.nova);
console.log(store.ghost);
console.log("zoom" in store);
console.log("xray" in store);โค1
What is the output?
Anonymous Quiz
13%
5 13 missing:ghost true false
31%
10 13 missing:ghost false true
30%
10 26 missing:ghost true true
26%
10 26 missing:ghost true false
โค1๐ค1
Created by someone who works on graphics for the NYT, this elegant library lets you work with polygons, bounding boxes, reflection, interpolation, rotation, and the like (examples). Does one polygon intersect with another? Thereโs a function for that.
Harry Stevens (The New York Times)
Please open Telegram to view this post
VIEW IN TELEGRAM
โค1๐ฅ1
CHALLENGE
class BankAccount {
#balance;
#transactionLog = [];
constructor(initialBalance) {
this.#balance = initialBalance;
}
deposit(amount) {
this.#balance += amount;
this.#transactionLog.push(`+${amount}`);
return this;
}
withdraw(amount) {
if (amount > this.#balance) throw new Error("Insufficient funds");
this.#balance -= amount;
this.#transactionLog.push(`-${amount}`);
return this;
}
get summary() {
return `Balance: ${this.#balance} | Txns: ${this.#transactionLog.join(", ")}`;
}
}
const account = new BankAccount(100);
account.deposit(50).deposit(25).withdraw(30);
console.log(account.summary);
console.log(account.hasOwnProperty("#balance"));โค2๐1
What is the output?
Anonymous Quiz
12%
true
30%
Balance: 175 | Txns: +50, +25, -30 false
34%
Balance: 145 | Txns: +50, +25, -30
23%
Balance: 145 | Txns: +50, +25, -30 false
๐ฅ4
Please open Telegram to view this post
VIEW IN TELEGRAM
โค6
CHALLENGE
class Vehicle {
#speed = 0;
constructor(type, maxSpeed) {
this.type = type;
this.maxSpeed = maxSpeed;
}
accelerate(amount) {
this.#speed = Math.min(this.#speed + amount, this.maxSpeed);
return this;
}
getStatus() {
return `${this.type} going ${this.#speed}/${this.maxSpeed} km/h`;
}
}
class ElectricVehicle extends Vehicle {
#battery;
constructor(type, maxSpeed, battery) {
super(type, maxSpeed);
this.#battery = battery;
}
accelerate(amount) {
this.#battery -= amount * 0.5;
return super.accelerate(amount);
}
getStatus() {
return `${super.getStatus()} | Battery: ${this.#battery}%`;
}
}
const ev = new ElectricVehicle("Tesla", 250, 100);
ev.accelerate(80).accelerate(200);
console.log(ev.getStatus());
console.log(ev instanceof Vehicle);
console.log(ev.constructor === ElectricVehicle);
โค6๐1๐คฉ1
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 composed = compose(negate, square, addTen, double);
const piped = pipe(negate, square, addTen, double);
const val = 3;
console.log(composed(val)); // compose: right-to-left
console.log(piped(val)); // pipe: left-to-right
โค2๐1