Published
Edited
Nov 15, 2019
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
{
// let employeesNearingRetirement = [];
// for(let i = 0; i < employees.length; i++) {
// if(employees[i].age > 60) {
// employeesNearingRetirement.push(employees[i])
// }
// }
// let employeesNearingRetirement = [];
// for(let employee of employees) {
// if(employee.age > 60) {
// employeesNearingRetirement.push(employee)
// }
// }
const isGreaterThanAge = greateThanAge => ({ age }) => age >= greateThanAge
const isNearRetirement = isGreaterThanAge(60);
const employeesNearingRetirement = employees.filter(isNearRetirement); //TODO
return table(employeesNearingRetirement);
}
Insert cell
Insert cell
{
// let employeesNearingRetirement = [];
// for(let i = 0; i < employees.length; i++) {
// if(employees[i].age > 60) {
// employeesNearingRetirement.push({ salary: employees[i].salary })
// }
// }
// let employeesNearingRetirement = [];
// for(let employee of employees) {
// if(employee.age > 60) {
// employeesNearingRetirement.push({ salaray: employee.salary })
// }
// }
const isGreaterThanAge = greateThanAge => ({ age }) => age >= greateThanAge
const isNearRetirement = isGreaterThanAge(60);
const employeesNearingRetirement = employees
.filter(isNearRetirement)
.map(({ salary }) => ({ salary })); //TODO
return table(employeesNearingRetirement);
}
Insert cell
Insert cell
{
// const averageSalaries = { average: 0, count: 0 };
// for(let i = 0; i < employees.length; i++) {
// if(employees[i].age > 60) {
// averageSalaries.average = (employees[i].salary + averageSalaries.average * averageSalaries.count) / (averageSalaries.count + 1);
// averageSalaries.count = averageSalaries.count + 1;
// }
// }
// let employeesNearingRetirement = [];
// const averageSalaries = { average: 0, count: 0 };
// for(let employee of employees) {
// if(employee.age > 60) {
// averageSalaries.average = (employee.salary + averageSalaries.average * averageSalaries.count) / (averageSalaries.count + 1);
// averageSalaries.count = averageSalaries.count + 1;
// }
// }
const isGreaterThanAge = greateThanAge => ({ age }) => age >= greateThanAge
const isNearRetirement = isGreaterThanAge(60);
const add = (a, b) => a + b;
// see https://jrsinclair.com/articles/2019/five-ways-to-average-with-js-reduce/
const averageSalaries = employees
.reduce(
({ average, count }, employee) => {
if(!isNearRetirement(employee)) {
return { average, count };
}
const { salary } = employee;
return {
average: (salary + count * average) / (count + 1),
count: count + 1
};
},
{ average: 0, count: 0 }
);
return averageSalaries;
}
Insert cell
{
const delay = (time) => (v) => new Promise(
(resolve) => setTimeout(
() => resolve(v),
time
)
);
const mapSeries = (fn, array) => {
return array.reduce(
(promise, item) => promise.then((results) => fn(item)
.then(result =>[...results, result])),
Promise.resolve([])
);
}
const delay1s = delay(1000);
const howLong = async (fn) => {
const start = new Date();
const result = await fn();
const elapsedTime = `${(new Date()) - start} ms`;
return {
result,
elapsedTime,
seed: Math.random(),
};
}
return howLong(() => mapSeries((value) => delay1s(value + 1), [1,2,3]))
}
Insert cell
Insert cell
Insert cell
Insert cell
import {R} from "@itacirgabral/ramda"
Insert cell
faker = require('https://bundle.run/faker@4.1.0')
Insert cell
import { table } from "@gampleman/table"
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more