UNPKG

ascor

Version:

一些常用的简单的js工具

68 lines (67 loc) 2.5 kB
import { isArray, isObject } from "../is/index"; /** * 根据返回的数组创建树接口 * @param arr * @param config,例:{ parentKey: "pid", ownKey: "id" } ,parentKey为父节点唯一标识的字段名,例如pid,ownKey为自己的唯一表示,如id * @return 返回创建好的树 */ export const createTree = (arr, config) => { if (!isArray(arr)) { return arr; } let _config = Object.assign({ parentKey: "pid", ownKey: "id", sortFn: (a, b) => { if (a.isLeaf && !b.isLeaf) { return 1; } if (!a.isLeaf && b.isLeaf) { return -1; } return 0; } }, (isObject(config) ? config : {})); const id = _config.ownKey; const pid = _config.parentKey; let index = 0; let tmp = arr.map(m => { return Object.assign(Object.assign({}, m), { children: [], isLeaf: true }); }), f = (data, flag) => { var _a, _b; if (isArray(data)) { for (let k = 0; k < data.length; k++) { if (tmp[index][pid] == data[k][id]) { if (!data[k].children .map((m) => { return m[id]; }) .includes(tmp[index][id])) { (_b = (_a = data === null || data === void 0 ? void 0 : data[k]) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.push(tmp.splice(index, 1)[0]); data[k].isLeaf = false; index--; } break; } else if (tmp[index][id] == data[k][pid]) { if (!tmp[index].children .map((m) => { return m[id]; }) .includes(tmp[index][id])) { tmp[index].children.push(data.splice(k, 1)[0]); tmp[index].isLeaf = false; if (!flag) { index--; } } break; } else { f(data[k].children, true); } } data.sort(_config === null || _config === void 0 ? void 0 : _config.sortFn); } }; for (index = 0; index < tmp.length; index++) { f(tmp); } return tmp; };