@visactor/vchart
Version:
charts lib based @visactor/VGrammar
55 lines (49 loc) • 2.46 kB
JavaScript
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