ascor
Version:
一些常用的简单的js工具
82 lines (81 loc) • 3.02 kB
JavaScript
;
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;
};