javascriptx
Version:
javascript 基础库扩展
42 lines (37 loc) • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
// 对tree结构进行过滤,返回新的tree
// func: 过滤函数,如果返回真,则不过滤,如果返回假,则过滤掉,同时子节点也过滤掉。
// field: 子对象中的数组值,默认值children
// level: 遍历深度,默认从0开始
// parent: 父节点, 默认为空
var filterTree = function filterTree(arr, func) {
var field = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';
var level = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
var parent = arguments[4];
var indexs = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
var parents = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : [];
var newArr = [];
if (arr instanceof Array || arr instanceof NodeList) {
for (var index = 0; index < arr.length; index++) {
var item = arr[index];
var _indexs = [].concat(_toConsumableArray(indexs), [index]);
var _parents = [].concat(_toConsumableArray(parents));
if (parent) {
_parents.push(parent);
}
var res = func(item, index, { arr: arr, level: level, parent: parent, indexs: _indexs, parents: _parents });
if (res) {
newArr.push(item);
if (item[field] instanceof Array || item[field] instanceof NodeList) {
item[field] = filterTree(item[field], func, field, level + 1, item, _indexs, _parents);
}
}
}
}
return newArr;
};
exports.default = filterTree;