UNPKG

fcr-core

Version:

Core APIs for building online scenes

64 lines (63 loc) 1.4 kB
import "core-js/modules/es.array.push.js"; export const iterateMap = (map, processors) => { const onFilter = processors?.onFilter || (() => true); const { onMap, onReduce } = processors || {}; const list = []; let prev = undefined; for (const [k, v] of map.entries()) { if (onFilter(k, v)) { if (onMap) list.push(onMap(k, v)); if (onReduce) prev = onReduce(prev, k, v); } } return { list, prev }; }; export const iterateSet = (map, processors) => { const onFilter = processors?.onFilter || (() => true); const { onMap, onReduce } = processors || {}; const list = []; let prev = undefined; for (const item of map.values()) { if (onFilter(item)) { if (onMap) list.push(onMap(item)); if (onReduce) prev = onReduce(prev, item); } } return { list, prev }; }; /** * expand a key-value map to a structure * .e.g. { 'a.b.c': 1 } => { a: { b: { c: 1 } } } * @param kvMap */ export const convertToStructure = kvMap => { const result = {}; for (const key in kvMap) { const keys = key.split('.'); let temp = result; for (let i = 0; i < keys.length; i++) { const k = keys[i]; if (i === keys.length - 1) { temp[k] = kvMap[key]; } else { if (!temp[k]) { temp[k] = {}; } temp = temp[k]; } } } return result; };