Published
Edited
Apr 16, 2019
1 star
Insert cell
Insert cell
Insert cell
sum = (a, b) => a + b
Insert cell
sum(10, 2)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
{
// Not `x += 1` or `x++` (you would need to use "let" keyword anyway)
const x = 1
const x1 = x + 1
return x1
}
Insert cell
Insert cell
// Not `oldArr.push(5)`
[...oldArr, 5]
Insert cell
Insert cell
// Not `oldArr.unshift(0)`
[0, ...oldArr]
Insert cell
Insert cell
// Not `oldObj.new = 'quox'`
({ ...oldObj, new: 'quox' })
Insert cell
Insert cell
// Not `oldObj.label = 'Potato'`
({ ...oldObj, label: 'Potato' })
Insert cell
Insert cell
{
// Not `delete oldObj.z`
const { z, ...newObj } = oldObj
return newObj
}
Insert cell
Insert cell
subtract = (a, b) => a - b
Insert cell
multiply = (a, b) => a * b
Insert cell
divide = (a, b) => a / b
Insert cell
md`
Sanity check:
- \`10 - 2: ${subtract(10, 2)}\`
- \`10 * 2: ${multiply(10, 2)}\`
- \`10 / 2: ${divide(10, 2)}\`
`
Insert cell
pass10 = (fn, b) => fn(10, b)
Insert cell
pass10(sum, 5)
Insert cell
pass10(multiply, 5)
Insert cell
pass10((a, b) => (20 + a) / b, 5)
Insert cell
cSum = a => b => a + b
Insert cell
cSubtract = a => b => a - b
Insert cell
cMultiply = a => b => a * b
Insert cell
cDivide = a => b => a / b
Insert cell
cSum(10)(2)
Insert cell
{
const add5 = cSum(5)
return [add5(5), add5(2), add5(100)]
}
Insert cell
Insert cell
{
let mediumProducts = []
for (let i = 0; i < products.length; i++) {
let currentProduct = products[i]
if (currentProduct.size === "M") {
mediumProducts.push(currentProduct)
}
}
return mediumProducts
}
Insert cell
products.filter(product => product.size === "M")
Insert cell
isMedium = product => product.size === "M"
Insert cell
products.filter(isMedium)
Insert cell
getProductName = product => product.name
Insert cell
products.map(getProductName)
Insert cell
getName = ({ name }) => name
Insert cell
products.map(getName)
Insert cell
Insert cell
customers.map(getName)
Insert cell
Insert cell
products.reduce((acc, { id, sex, size, type }) => ({
...acc,
[id]: `${type} - ${sex} (${size})`
}), {})
Insert cell
Insert cell
rGetName = R.prop('name')
Insert cell
R.map(rGetName, customers)
Insert cell
Insert cell
{
let output = {}
for (let i = 0; i < customers.length; i++) {
const { name: cName, sex: cSex, size: cSize } = customers[i]
let productNames = []
for (let j = 0; j < products.length; j++) {
const { name: pName, sex: pSex, size: pSize } = products[j]
if (cSex === pSex && cSize === pSize) {
productNames.push(pName)
}
}
output[cName.toUpperCase()] = productNames
}
return output
}
Insert cell
Insert cell
customers.reduce((acc, { name: cName, sex: cSex, size: cSize }) => {
const productNames = products
.filter(
({ sex: pSex, size: pSize }) => cSex === pSex && cSize === pSize
)
.map(R.prop('name'))

return {
...acc,
[R.toUpper(cName)]: productNames
}
}, {})
Insert cell
Insert cell
{
const extractSexSize = R.pick(['sex', 'size'])
const isSameSexSize = obj1 => obj2 => R.equals(extractSexSize(obj1), extractSexSize(obj2))
const filterProducts = nProducts => nCustomer => R.filter(isSameSexSize(nCustomer), nProducts)
const getName = R.prop('name')
const getUpperName = R.pipe(getName, R.toUpper)
const magicFn = products => customers => {
const getCustomerProducts = filterProducts(products)
return R.reduce((acc, customer) => ({
...acc,
[getUpperName(customer)]: R.map(getName, getCustomerProducts(customer))
}), {}, customers)
}
return magicFn(products)(customers)
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
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