UNPKG

ascor

Version:

一些常用的简单的js工具

82 lines (81 loc) 3.02 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTree = void 0; var index_1 = require("../is/index"); /** * 根据返回的数组创建树接口 * @param arr * @param config,例:{ parentKey: "pid", ownKey: "id" } ,parentKey为父节点唯一标识的字段名,例如pid,ownKey为自己的唯一表示,如id * @return 返回创建好的树 */ exports.createTree = function (arr, config) { if (!index_1.isArray(arr)) { return arr; } var _config = __assign({ parentKey: "pid", ownKey: "id", sortFn: function (a, b) { if (a.isLeaf && !b.isLeaf) { return 1; } if (!a.isLeaf && b.isLeaf) { return -1; } return 0; } }, (index_1.isObject(config) ? config : {})); var id = _config.ownKey; var pid = _config.parentKey; var index = 0; var tmp = arr.map(function (m) { return __assign(__assign({}, m), { children: [], isLeaf: true }); }), f = function (data, flag) { var _a, _b; if (index_1.isArray(data)) { for (var k = 0; k < data.length; k++) { if (tmp[index][pid] == data[k][id]) { if (!data[k].children .map(function (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(function (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; };