UNPKG

object-hierarchy-access

Version:

Get/Set value from/to JS object hierarchy properties

66 lines (60 loc) 1.83 kB
const assert = require('assert').strict; const {pick} = require('../../'); const buildingX = Symbol('x'); const rooms = { building1: { floor1: [{roomNo: '1-101'}, {roomNo: '1-102'}, {roomNo: '1-103'}], floor2: [{roomNo: '1-201'}, {roomNo: '1-202'}, {roomNo: '1-203'}], floor3: [{roomNo: '1-301'}, {roomNo: '1-302'}, {roomNo: '1-303'}] }, building2: { floor1: [{roomNo: '2-101'}, {roomNo: '2-102'}, {roomNo: '2-103'}], floor2: [{roomNo: '2-201'}, {roomNo: '2-202'}, {roomNo: '2-203'}], floor3: [{roomNo: '2-301'}, {roomNo: '2-302'}, {roomNo: '2-303'}] }, building3: { floor1: [{roomNo: '3-101'}, {roomNo: '3-102'}, {roomNo: '3-103'}], floor2: [{roomNo: '3-201'}, {roomNo: '3-202'}, {roomNo: '3-203'}], floor3: [{roomNo: '3-301'}, {roomNo: '3-302'}, {roomNo: '3-303'}] }, building4: {}, building5: { floor1: undefined }, building6: { floor1: [] }, [buildingX]: { floor1: [{roomNo: 'x-101'}, {roomNo: 'x-102'}, {roomNo: 'x-103'}], floor2: [{roomNo: 'x-201'}, {roomNo: 'x-202'}, {roomNo: 'x-203'}], floor3: [{roomNo: 'x-301'}, {roomNo: 'x-302'}, {roomNo: 'x-303'}] } }; const allFloor1Rooms = pick(rooms, ['building1', 'building2', 'building3', 'building4', buildingX], 'floor1', undefined); assert.deepEqual(allFloor1Rooms, [ {roomNo: '1-101'}, {roomNo: '1-102'}, {roomNo: '1-103'}, {roomNo: '2-101'}, {roomNo: '2-102'}, {roomNo: '2-103'}, {roomNo: '3-101'}, {roomNo: '3-102'}, {roomNo: '3-103'}, {roomNo: 'x-101'}, {roomNo: 'x-102'}, {roomNo: 'x-103'} ]); const productPrices = { p1: {price: 100}, p2: {price: 200} }; const products = pick(productPrices, { names: undefined, mapValue: (parent, name, current) => ({ productId: name, price: current.price }) }); assert.deepEqual(products, [ { productId: 'p1', price: 100 }, { productId: 'p2', price: 200 } ]);