fcr-core
Version:
Core APIs for building online scenes
64 lines (63 loc) • 1.4 kB
JavaScript
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;
};