UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

55 lines (49 loc) 2.46 kB
import { isObject } from "@visactor/vutils"; export const findHierarchyNode = (hierarchyData, key, keyField = "key", childrenField = "children") => { for (let i = 0; i < hierarchyData.length; i++) { const node = hierarchyData[i]; if (node[keyField] === key) return node; if (node[childrenField]) { const result = findHierarchyNode(node[childrenField], key, keyField, childrenField); if (result) return result; } } return null; }; export const findHierarchyNodeParent = (hierarchyData, key, keyField = "key", childrenField = "children") => { for (let i = 0; i < hierarchyData.length; i++) { const node = hierarchyData[i]; if (node[childrenField]) for (let j = 0; j < node[childrenField].length; j++) { const childNode = node[childrenField][j]; if (childNode[keyField] === key) return node; const result = findHierarchyNodeParent([ childNode ], key, keyField, childrenField); if (result) return result; } } return null; }; export const findHierarchyPath = (hierarchyData, key, keyField = "key", childrenField = "children") => { const result = [], dfs = (data, path) => { for (const item of data) { if (item[keyField] === key) return result.push(...path, item[keyField].toString()), !0; if (item[childrenField]) { const res = dfs(item[childrenField], [ ...path, item[keyField] ]); if (!0 === res) return res; } } return !1; }; return dfs(hierarchyData, []), result; }; export function isHierarchyItem(item, valueField = "value", childrenField = "children") { return !!isObject(item) && (!!item.hasOwnProperty(childrenField) && Array.isArray(item[childrenField])); } export function filterHierarchyDataByRange(data, minValue, maxValue, valueField = "value", childrenField = "children") { return Array.isArray(data) ? data.map((item => { const newItem = Object.assign({}, item); return Array.isArray(newItem[childrenField]) && (newItem[childrenField] = filterHierarchyDataByRange(newItem[childrenField], minValue, maxValue, valueField, childrenField)), newItem; })).filter((item => +item[valueField] >= minValue && +item[valueField] <= maxValue || item[childrenField] && item[childrenField].length > 0)) : data; } //# sourceMappingURL=hierarchy.js.map