UNPKG

pm-xe-utils

Version:

JavaScript 函数库、工具类

1 lines 95.3 kB
(function(e){function n(n){for(var a,l,r=n[0],d=n[1],c=n[2],m=0,u=[];m<r.length;m++)l=r[m],Object.prototype.hasOwnProperty.call(s,l)&&s[l]&&u.push(s[l][0]),s[l]=0;for(a in d)Object.prototype.hasOwnProperty.call(d,a)&&(e[a]=d[a]);o&&o(n);while(u.length)u.shift()();return i.push.apply(i,c||[]),t()}function t(){for(var e,n=0;n<i.length;n++){for(var t=i[n],a=!0,r=1;r<t.length;r++){var d=t[r];0!==s[d]&&(a=!1)}a&&(i.splice(n--,1),e=l(l.s=t[0]))}return e}var a={},s={app:0},i=[];function l(n){if(a[n])return a[n].exports;var t=a[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=a,l.d=function(e,n,t){l.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,n){if(1&n&&(e=l(e)),8&n)return e;if(4&n&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)l.d(t,a,function(n){return e[n]}.bind(null,a));return t},l.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(n,"a",n),n},l.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},l.p="/";var r=window["webpackJsonp"]=window["webpackJsonp"]||[],d=r.push.bind(r);r.push=n,r=r.slice();for(var c=0;c<r.length;c++)n(r[c]);var o=d;i.push([0,"chunk-vendors"]),t()})({0:function(e,n,t){e.exports=t("cd49")},"5c0b":function(e,n,t){"use strict";t("9c0c")},"735e":function(e,n,t){"use strict";t("7c7c")},"7c7c":function(e,n,t){},"9c0c":function(e,n,t){},cd49:function(e,n,t){"use strict";t.r(n);t("e260"),t("e6cf"),t("cca6"),t("a79d");var a=t("2b0e"),s=function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",{attrs:{id:"app"}},[t("router-view")],1)},i=[],l=(t("5c0b"),t("2877")),r={},d=Object(l["a"])(r,s,i,!1,null,null,null),c=d.exports,o=t("8c4f"),m=function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",{staticClass:"page-container"},[t("div",{staticClass:"aside"},[t("div",{staticClass:"header"},[e._m(0),t("div",{staticClass:"search-wrapper"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.filterName,expression:"filterName"}],staticClass:"search-input",attrs:{type:"search",placeholder:"API 搜索"},domProps:{value:e.filterName},on:{input:function(n){n.target.composing||(e.filterName=n.target.value)}}})])]),t("ul",e._l(e.apiList,(function(n){return t("li",{key:n.id,staticClass:"menu-item"},[t("a",{staticClass:"menu-link",on:{click:function(e){n.expand=!n.expand}}},[e._v(e._s(n.label))]),t("ul",{directives:[{name:"show",rawName:"v-show",value:n.expand,expression:"group.expand"}],staticClass:"child-menu"},e._l(n.children,(function(n){return t("li",{key:n.id,staticClass:"menu-item",class:{active:e.selected===n}},[t("a",{staticClass:"menu-link",domProps:{innerHTML:e._s(n.name)},on:{click:function(t){return e.menuLinkEvent(n)}}})])})),0)])})),0)]),t("div",{staticClass:"body"},[e._l(e.apiList,(function(n){return t("div",{key:n.id},e._l(n.children,(function(n){return t("div",{key:n.id,staticClass:"api-item"},[t("p",{staticClass:"title",attrs:{id:n.name},domProps:{innerHTML:e._s(n.name+" ("+n.args+") "+n.title)}}),t("p",{staticClass:"desc",domProps:{innerHTML:e._s(n.desc)}}),n.params&&n.params.length?t("table",{staticClass:"param-table",attrs:{border:"0"}},e._l(n.params,(function(n,a){return t("tr",{key:a},e._l(n,(function(n,a){return t("td",{key:a},[e._v(e._s(n))])})),0)})),0):e._e(),t("pre",[e._v(" "),e._l(n.codes,(function(n,a){return t("code",{key:a,staticClass:"javascript"},[e._v(e._s(n))])})),e._v("\n ")],2)])})),0)})),e._m(1)],2)])},u=[function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("h1",{staticClass:"title"},[t("a",{attrs:{href:"https://github.com/xuliangzhan/xe-utils"}},[e._v("xe-utils")])])},function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",[t("div",{staticClass:"donation-item",attrs:{id:"donation"}},[t("p",[e._v("如果您觉得我们的开源软件对你有所帮助,请扫下方二维码打赏我们一杯咖啡☕")]),t("p",[e._v("由于维护一个开源项目需要花费非常大的精力与时间,如果您正在使用该项目,您的捐赠会帮助该项目能持续发展下去")]),t("img",{attrs:{src:"static/donation/pay.jpg"}})])])}],E=(t("4d63"),t("c607"),t("ac1f"),t("2c3e"),t("25f0"),t("b0c0"),t("5319"),t("d3b7"),t("159b"),t("a630"),t("3ca3"),t("1487")),p=t.n(E),g={data:function(){return{selected:null,filterName:"",list:[{label:"Base",value:"base",expand:!0,children:[{name:"isNaN",args:"val",title:"判断是否非数值,如果 value 是一个 NaN,那么返回 true,否则返回 false",desc:"",params:[],codes:["\n isNaN(undefined) // true\n XEUtils.isNaN(undefined) // false\n XEUtils.isNaN(NaN) // true\n "]},{name:"isFinite",args:"val",title:"判断是否为有限数值",desc:"",params:[],codes:["\n XEUtils.isFinite(NaN) // false\n XEUtils.isFinite(0) // true\n XEUtils.isFinite(2e64) // true\n "]},{name:"isUndefined",args:"val",title:"判断 Undefined",desc:"",params:[],codes:["\n XEUtils.isUndefined(0) // false\n XEUtils.isUndefined() // true\n "]},{name:"isArray",args:"val",title:"判断是否数组",desc:"",params:[],codes:["\n XEUtils.isArray(null) // false\n XEUtils.isArray({}) // false\n XEUtils.isArray([1,2,3]) // true\n "]},{name:"isFloat",args:"val",title:"判断是否小数",desc:"",params:[],codes:["\n XEUtils.isFloat(null) // false\n XEUtils.isFloat(0) // false\n XEUtils.isFloat(3) // false\n XEUtils.isFloat(3.3) // true\n "]},{name:"isInteger",args:"val",title:"判断是否整数",desc:"",params:[],codes:["\n XEUtils.isInteger(null) // false\n XEUtils.isInteger(3.3) // false\n XEUtils.isInteger(3) // true\n XEUtils.isInteger(0) // true\n "]},{name:"isFunction",args:"val",title:"判断是否方法",desc:"",params:[],codes:["\n XEUtils.isFunction({}) // false\n XEUtils.isFunction(function(){}) // true\n "]},{name:"isBoolean",args:"val",title:"判断是否 Boolean 对象",desc:"",params:[],codes:["\n XEUtils.isBoolean('false') // false\n XEUtils.isBoolean(true) // true\n "]},{name:"isString",args:"val",title:"判断是否 String 对象",desc:"",params:[],codes:["\n XEUtils.isString(1) // false\n XEUtils.isString(true) // false\n XEUtils.isString('') // true\n XEUtils.isString('abc') // true\n "]},{name:"isNumber",args:"val",title:"判断是否 Number 对象",desc:"",params:[],codes:["\n XEUtils.isNumber(null) // false\n XEUtils.isNumber('1') // false\n XEUtils.isNumber(1) // true\n "]},{name:"isRegExp",args:"val",title:"判断是否 RegExp 对象",desc:"",params:[],codes:["\n XEUtils.isRegExp(null) // false\n XEUtils.isRegExp('a') // false\n XEUtils.isRegExp(new RegExp('a')) // true\n XEUtils.isRegExp(/\\d/) // true\n "]},{name:"isObject",args:"val",title:"判断是否 Object 对象",desc:"",params:[],codes:["\n XEUtils.isObject(null) // true\n XEUtils.isObject([]) // true\n XEUtils.isObject({}) // true\n XEUtils.isObject(123) // false\n "]},{name:"isPlainObject",args:"val",title:"判断是否是一个对象",desc:"",params:[],codes:["\n XEUtils.isPlainObject(null) // false\n XEUtils.isPlainObject([]) // false\n XEUtils.isPlainObject(123) // false\n XEUtils.isPlainObject({}) // true\n "]},{name:"isDate",args:"val",title:"判断是否 Date 对象,如果是无效日期 Invalid Date 也返回 true",desc:"",params:[],codes:["\n XEUtils.isDate('2017-12-20') // false\n XEUtils.isDate(1514096716800) // false\n XEUtils.isDate(new Date('abc')) // Invalid Date => true\n XEUtils.isDate(new Date()) // true\n "]},{name:"isValidDate",args:"val",title:"和 isDate 的区别是同时判断类型与有效日期,如果为无效日期 Invalid Date 则返回 false",desc:"",params:[],codes:["\n XEUtils.isValidDate('2017-12-20') // false\n XEUtils.isValidDate(1514096716800) // false\n XEUtils.isValidDate(new Date('abc')) // Invalid Date => false\n XEUtils.isValidDate(new Date()) // true\n "]},{name:"isError",args:"val",title:"判断是否 Error 对象",desc:"",params:[],codes:["\n XEUtils.isError(null) // false\n XEUtils.isError({}) // false\n XEUtils.isError(new TypeError('error')) // true\n XEUtils.isError(new Error('error')) // true\n "]},{name:"isTypeError",args:"val",title:"判断是否 TypeError 对象",desc:"",params:[],codes:["\n XEUtils.isTypeError(null) // false\n XEUtils.isTypeError({}) // false\n XEUtils.isTypeError(new Error('error')) // false\n XEUtils.isTypeError(new TypeError('error')) // true\n "]},{name:"isEmpty",args:"val",title:"判断是否为空对象",desc:"",params:[],codes:["\n XEUtils.isEmpty([11, 22]) // false\n XEUtils.isEmpty({a:null}) // false\n XEUtils.isEmpty(null) // true\n XEUtils.isEmpty({}) // true\n XEUtils.isEmpty([]) // true\n "]},{name:"isNull",args:"val",title:"判断是否为 Null",desc:"",params:[],codes:["\n XEUtils.isNull(0) // false\n XEUtils.isNull('') // false\n XEUtils.isNull(null) // true\n "]},{name:"isSymbol",args:"val",title:"判断是否 Symbol 对象",desc:"",params:[],codes:["\n XEUtils.isSymbol('a') // false\n XEUtils.isSymbol(Symbol('a')) // true\n "]},{name:"isArguments",args:"val",title:"判断是否 Arguments 对象",desc:"",params:[],codes:["\n XEUtils.isArguments([]) // false\n XEUtils.isArguments(arguments) // true\n "]},{name:"isElement",args:"val",title:"判断是否 Element 对象",desc:"",params:[],codes:["\n XEUtils.isElement({}) // false\n XEUtils.isElement(document.createElement('div')) // true\n "]},{name:"isDocument",args:"val",title:"判断是否 Document 对象",desc:"",params:[],codes:["\n XEUtils.isDocument({}) // false\n XEUtils.isDocument(document.createElement('div')) // false\n XEUtils.isDocument(document) // true\n "]},{name:"isWindow",args:"val",title:"判断是否 Window 对象",desc:"",params:[],codes:["\n XEUtils.isWindow({}) // false\n XEUtils.isWindow(document) // false\n XEUtils.isWindow(window) // true\n "]},{name:"isFormData",args:"val",title:"判断是否 FormData 对象",desc:"",params:[],codes:["\n XEUtils.isFormData({}) // false\n XEUtils.isFormData(new FormData()) // true\n "]},{name:"isMap",args:"val",title:"判断是否 Map 对象",desc:"",params:[],codes:["\n XEUtils.isMap({}) // false\n XEUtils.isMap(new Map()) // true\n "]},{name:"isWeakMap",args:"val",title:"判断是否 WeakMap 对象",desc:"",params:[],codes:["\n XEUtils.isWeakMap({}) // false\n XEUtils.isWeakMap(new WeakMap()) // true\n "]},{name:"isSet",args:"val",title:"判断是否 Set 对象",desc:"",params:[],codes:["\n XEUtils.isSet({}) // false\n XEUtils.isSet(new Set()) // true\n "]},{name:"isWeakSet",args:"val",title:"判断是否 WeakSet 对象",desc:"",params:[],codes:["\n XEUtils.isWeakSet({}) // false\n XEUtils.isWeakSet(new WeakSet()) // true\n "]},{name:"isLeapYear",args:"date",title:"判断是否闰年",desc:"",params:[],codes:["\n XEUtils.isLeapYear(1606752000000) // true\n XEUtils.isLeapYear('2018-12-01') // false\n XEUtils.isLeapYear('2020-12-01') // true\n XEUtils.isLeapYear(new Date('2020/12/01')) // true\n "]},{name:"isMatch",args:"obj, source",title:"判断属性中的键和值是否包含在对象中",desc:"",params:[],codes:["\n XEUtils.isMatch({ aa: 11, bb: 22 }, { bb: 22 }) // true\n XEUtils.isMatch({ aa: 11, bb: 22 }, { bb: 33 }) // false\n "]},{name:"isEqual",args:"obj1, obj2",title:"深度比较两个对象之间的值是否相等",desc:"",params:[],codes:["\n XEUtils.isEqual({}, []) // false\n XEUtils.isEqual({0: 1}, [1]) // false\n XEUtils.isEqual({name: 'test1'}, {name: 'test1'}) // true\n XEUtils.isEqual({name: 'test1', list: [11, /\\d/]}, {name: 'test1', list: [11, /\\d/]}) // true\n XEUtils.isEqual({name: 'test1', list: [11, 33, {a: /\\D/}]}, {name: 'test1', list: [11, 33, {a: /\\d/}]}) // false\n "]},{name:"isEqualWith",args:"obj1, obj2, func",title:"深度比较两个对象之间的值是否相等,使用自定义比较函数",desc:"",params:[],codes:["\n XEUtils.isEqualWith({0: 1}, [1]) // false\n XEUtils.isEqualWith({0: 1}, [1], (v1, v2) => true) // true\n XEUtils.isEqualWith([1], [1]) // true\n XEUtils.isEqualWith([1], [1], (v1, v2) => false) // false\n "]},{name:"isDateSame",args:"date1, date2, format",title:"判断两个日期是否相同",desc:"",params:[],codes:["\n XEUtils.isDateSame('2018-12-01', '2018-12-01') // true\n XEUtils.isDateSame(new Date(), '2018-12-01', 'yyyy') // 判断是否同一年 true\n XEUtils.isDateSame(new Date(), XEUtils.toStringDate('12/30/2018', 'MM/dd/yyyy'), 'MM') // 判断是否同一月 true\n XEUtils.isDateSame(new Date(), new Date(), 'dd') // 判断是否同一日 true\n XEUtils.isDateSame(new Date(), new Date(), 'yyyyMMdd') // 判断是否同年同月同日 true\n "]},{name:"getType",args:"obj",title:"获取对象类型",desc:"",params:[],codes:["\n XEUtils.getType() // 'undefined'\n XEUtils.getType(null) // 'null'\n XEUtils.getType('') // 'string'\n XEUtils.getType(/\\d/) // 'regexp'\n XEUtils.getType(1) // 'number'\n XEUtils.getType([]) // 'array'\n XEUtils.getType({}) // 'object'\n XEUtils.getType(new Error()) // 'error'\n XEUtils.getType(function(){}) // 'function'\n "]},{name:"uniqueId",args:"prefix",title:"获取一个全局唯一标识",desc:"",params:[],codes:["\n XEUtils.uniqueId() // 1\n XEUtils.uniqueId() // 2\n XEUtils.uniqueId('prefix_') // 'prefix_3'\n "]},{name:"getSize",args:"obj",title:"返回对象的长度",desc:"",params:[],codes:["\n XEUtils.getSize('123') // 3\n XEUtils.getSize([1, 3]) // 2\n XEUtils.getSize({a: 2, b: 5}) // 2\n "]},{name:"toStringJSON",args:"str",title:"字符串转 JSON",desc:"",params:[],codes:["\n XEUtils.toStringJSON('{\"a\":1}') // {a: 1}\n XEUtils.toStringJSON('[11,22]') // [11, 22]\n "]},{name:"toJSONString",args:"obj",title:"JSON 转字符串",desc:"",params:[],codes:["\n XEUtils.toJSONString({a: 1}) // '{\"a\":1}'\n XEUtils.toJSONString([11, 22]) // '[11,22]'\n "]},{name:"keys",args:"obj",title:"获取对象所有属性",desc:"",params:[],codes:["\n XEUtils.keys({a: 11}) // ['a']\n "]},{name:"values",args:"obj",title:"获取对象所有值",desc:"",params:[],codes:["\n XEUtils.values({a: 11}) // [11]\n "]},{name:"entries",args:"obj",title:"获取对象所有属性、值",desc:"",params:[],codes:["\n XEUtils.entries({a: 11}) // [['a', 11]]\n XEUtils.entries([11, 22]) // [['0', 11], ['1', 22]]\n "]},{name:"first",args:"obj",title:"获取对象第一个值",desc:"",params:[],codes:["\n XEUtils.first({a: 11, b : 22}) // 11\n XEUtils.first([11, 22]) // 11\n "]},{name:"last",args:"obj",title:"获取对象最后一个值",desc:"",params:[],codes:["\n XEUtils.last({a: 11, b: 22}) // 22\n XEUtils.last([11, 22]) // 22\n "]},{name:"each",args:"obj, iterate [, context]",title:"通用迭代器",desc:"",params:[],codes:["\n XEUtils.each([11, 22, 33], (item, key) => {\n // 通用迭代器,支持遍历任意类型\n })\n "]},{name:"lastEach",args:"obj, iterate [, context]",title:"通用迭代器,从最后开始迭代",desc:"",params:[],codes:["\n XEUtils.lastEach([11, 22, 33], (item, key) => {\n // 通用迭代器,支持遍历任意类型\n })\n "]},{name:"range",args:"start, stop, step",title:"序号列表生成函数",desc:"",params:[],codes:["\n XEUtils.range(0) // []\n XEUtils.range(10) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n XEUtils.range(-5, 5) // [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]\n XEUtils.range(0, 10, 2) // [0, 2, 4, 6, 8]\n "]}]},{label:"Object",value:"object",expand:!0,children:[{name:"has",args:"obj, property",title:"检查键、路径是否是该对象的属性",desc:"",params:[],codes:["\n XEUtils.has({a: {b: 11, c: 22, d: [33, 44]}}, 'a.b') // true\n XEUtils.has({a: {b: 11, c: 22, d: [33, 44]}}, 'a.e') // false\n XEUtils.has({a: {b: 11, c: 22, d: [33, 44]}}, 'a.d[0]') // true\n XEUtils.has({a: {b: 11, c: 22, d: [33, {f: 66}]}}, 'a.d[1].f') // true\n XEUtils.has({a: {b: 11, c: 22, d: [33, 44]}}, ['a', 'd[1]']) // true\n XEUtils.has({a: {b: 11, c: 22, d: [33, 44]}}, ['a', 'd[3]']) // false\n "]},{name:"get",args:"obj, property, defaultValue",title:"获取对象的属性的值,如果值为 undefined,则返回默认值",desc:"",params:[],codes:["\n XEUtils.get({a: {b: 11, c: 22, d: [33, 44]}}, 'a.b') // 11\n XEUtils.get({a: {b: 11, c: 22, d: [33, 44]}}, 'a.e', 'default') // 'default'\n XEUtils.get({a: {b: 11, c: 22, d: [33, 44]}}, 'a.d[0]') // 33\n XEUtils.get({a: {b: 11, c: 22, d: [33, {f: 66}]}}, 'a.d[1].f') // 66\n XEUtils.get({a: {b: 11, c: 22, d: [33, 44]}}, ['a', 'c']) // 22\n "]},{name:"set",args:"obj, property, value",title:"设置对象属性上的值。如果属性不存在则创建它",desc:"",params:[],codes:["\n XEUtils.set({}, 'a.d[0]', 33) // {a: {d: [33]}}\n XEUtils.set({a: {}}, 'a.d[0].f.h', 44) // {a: {d: [{f: {h: 44}}]}}\n XEUtils.set({}, ['a', 'c'], 22) // {a: {c: 22}}\n XEUtils.set({}, ['a', 'd[0]', 'f', 'h'], 44) // {a: {d: [{f: {h: 44}}]}}\n "]},{name:"clear",args:"obj[, defs, assigns]",title:"清空对象; defs如果不传(清空所有属性)、如果传对象(清空并继承)、如果传值(给所有赋值)",desc:"",params:[],codes:["\n let a = [11, 22, 33, 33]\n XEUtils.clear(a) // []\n XEUtils.clear(a, undefined) // [undefined, undefined, undefined, undefined]\n XEUtils.clear(a, null) // [null, null, null, null]\n let b = {b1: 11, b2: 22}\n XEUtils.clear(b) // {}\n XEUtils.clear(b, undefined) // {b1: undefined, b2: undefined}\n XEUtils.clear(b, null) // {b1: null, b2: null}\n "]},{name:"assign",args:"target, ...sources",title:"将一个或多个源对象复制到目标对象中",desc:"",params:[],codes:["\n const obj1 = {a: 0, b: {b1: 11}}\n const obj2 = XEUtils.assign(obj1, {a: 11}, {c: 33})\n // {a: 11, b: {b1: 11}, c: 33}\n\n const obj3 = {a: 0, b: {b1: 11}}\n const obj4 = XEUtils.assign(obj1, {a: 11, b: {b2: 22}})\n // {a: 11, b: {b2: 22}}\n "]},{name:"merge",args:"target, ...sources",title:"将一个或多个源对象合并到目标对象中,和 assign 的区别是会将对象或数组类型递归合并",desc:"",params:[],codes:["\n const obj1 = [{a: 11}, {b: 22}]\n const obj2 = XEUtils.merge(obj1, [{c: 33}, {d: 44}])\n // [{a: 11, c: 33}, {b: 22, d: 44}]\n\n const obj3 = {a: 0, b: {b1: 11}, c: {c1: {d: 44}}}\n const obj4 = XEUtils.merge(obj1, {a: 11, b: {b2: 22}, c: {f1: 55}})\n // {a: 11, b: {b1: 11, b2: 22}, c: {c1: {d: 44}, f1: 55}}\n "]},{name:"clone",args:"obj, deep",title:"浅拷贝/深拷贝,和 assign 的区别是支持对象的递归克隆",desc:"",params:[],codes:["\n let v1 = {a: 11, b: {b1: 22}}\n let v2 = XEUtils.clone(v1)\n if (v1.b === v2.b) {\n // true\n }\n let v3 = XEUtils.clone(v1, true)\n if (v1.b === v3.b) {\n // false\n }\n "]},{name:"destructuring",args:"obj, ...target",title:"将一个或者多个对象值解构到目标对象",desc:"",params:[],codes:["\n XEUtils.destructuring({a: null}, {a: 11, b: 22, c: 33}) // {a: 11}\n XEUtils.destructuring({a: 11, d: 44}, {a: 11, b: 22, c: 33}) // {a: 11, d: 44}\n XEUtils.destructuring({a: 11, c: 33, d: 44}, {a: 11, b: 22, c: null, e: 55, f: 66}) // {a: 11, c: null, d: 44}\n "]},{name:"objectEach",args:"obj, iterate [, context]",title:"对象迭代器",desc:"",params:[],codes:["\n XEUtils.objectEach([11, 22, 33], (item, key) => {\n // 对象迭代器,只能用于遍历对象,性能高于 each\n })\n "]},{name:"lastObjectEach",args:"obj, iterate [, context]",title:"通用迭代器,从最后开始迭代",desc:"",params:[],codes:["\n XEUtils.lastObjectEach([11, 22, 33], (item, key) => {\n // 对象迭代器,只能用于遍历对象,性能高于 lastEach\n })\n "]},{name:"objectMap",args:"obj, iterate [, context]",title:"指定方法后的返回值组成的新对象",desc:"",params:[],codes:["\n XEUtils.objectMap({a: {type: 'a'}, b: {type: 'b'}}, item => item.type) // {a: \"a\", b: \"b\"}\n "]},{name:"pick",args:"obj, array",title:"根据 keys 过滤指定的属性值 或者 接收一个判断函数,返回一个新的对象",desc:"",params:[],codes:["\n XEUtils.pick({name: 'test11', age: 25, height: 176}, 'name', 'height') // {name: 'test11', height: 176}\n XEUtils.pick({name: 'test11', age: 25, height: 176}, ['name', 'age']) // {name: 'test11', age: 25}\n XEUtils.pick({name: 'test11', age: 25, height: 176}, val => XEUtils.isNumber(val)) // {age: 25, height: 176}\n "]},{name:"omit",args:"obj, array",title:"根据 keys 排除指定的属性值 或者 接收一个判断函数,返回一个新的对象",desc:"",params:[],codes:["\n XEUtils.omit({name: 'test11', age: 25, height: 176}, 'name', 'height') // {age: 25}\n XEUtils.omit({name: 'test11', age: 25, height: 176}, ['name', 'age']) // {height: 176}\n XEUtils.omit({name: 'test11', age: 25, height: 176}, val => XEUtils.isNumber(val)) // {name: 'test11'}\n "]}]},{label:"Function",value:"function",expand:!0,children:[{name:"noop",args:"",title:"一个空的方法,始终返回 undefined,可用于初始化值",desc:"",params:[],codes:["\n [11, 22, 33].map(XEUtils.noop)\n // [undefined, undefined, undefined]\n "]},{name:"delay",args:"callback, wait[, ...arguments]",title:"该方法和 setTimeout 一样的效果,区别就是支持额外参数",desc:"",params:[],codes:["\n XEUtils.delay(function (name) {\n console.log(name)\n }, 300, 'test11')\n // 'test11'\n "]},{name:"bind",args:"callback, context[, ...arguments]",title:"创建一个绑定上下文的函数",desc:"",params:[],codes:["\n let rest = XEUtils.bind(function (val) {\n return this.name + ' = ' + val\n }, {name: 'test'})\n rest(222) // 'test = 222'\n rest(333) // 'test = 333'\n "]},{name:"once",args:"callback, context[, ...arguments]",title:"创建一个只能调用一次的函数,只会返回第一次执行后的结果",desc:"",params:[],codes:["\n let rest = XEUtils.once(function (val) {\n return this.name + ' = ' + val\n }, {name: 'test'})\n rest(222) // 'test = 222'\n rest(333) // 'test = 222'\n "]},{name:"after",args:"count, callback, context",title:"创建一个函数, 调用次数超过 count 次之后执行回调并将所有结果记住后返回",desc:"",params:[],codes:["\n function getJSON (url, callback) {\n setTimeout(function() {\n callback({name: 'test1'})\n }, 200)\n }\n\n // 如果你想确保所有异步请求完成之后才执行这个函数\n let finish = XEUtils.after(3, function (rests) {\n console.log('All finish')\n })\n getJSON('/api/list1', finish)\n getJSON('/api/list2', finish)\n getJSON('/api/list3', finish)\n "]},{name:"before",args:"count, callback, context",title:"创建一个函数, 调用次数不超过 count 次之前执行回调并将所有结果记住后返回",desc:"",params:[],codes:["\n document.querySelector('.btn').addEventListener('click', XEUtils.before(4, function (rests) {\n console.log('只能点击三次')\n }))\n "]},{name:"throttle",args:"callback, wait[, options]",title:"节流函数;当被调用 n 毫秒后才会执行,如果在这时间内又被调用则至少每隔 n 秒毫秒调用一次该函数",desc:"",params:[],codes:["\n function scrollEvent (evnt) {\n console.log('至少每隔wait秒毫秒之内只会调用一次')\n }\n\n // 在计时结束之前执行\n document.body.addEventListener('scroll', XEUtils.throttle(scrollEvent, 100))\n // 在计时结束之前执行\n document.body.addEventListener('scroll', XEUtils.throttle(scrollEvent, 100, {\n leading: true,\n trailing: false\n }))\n // 在计时结束之后执行\n document.body.addEventListener('scroll', XEUtils.throttle(scrollEvent, 100, {\n leading: false,\n trailing: true\n }))\n\n let func = XEUtils.throttle(function (msg) {\n console.log(msg)\n }, 300)\n func('执行一次')\n func.cancel()\n func('取消后中断计时,再次调用会马上执行')\n "]},{name:"debounce",args:"callback, wait[, options]",title:"函数去抖;当被调用 n 毫秒后才会执行,如果在这时间内又被调用则将重新计算执行时间",desc:"",params:[],codes:["\n function resizeEvent (evnt) {\n console.log('如果wait毫秒内重复调用则会重新计时,在函数最后一次调用wait毫秒之后才会执行回调')\n }\n\n // 在计时结束之后执行\n document.addEventListener('resize', XEUtils.debounce(resizeEvent, 100))\n // 在计时结束之前执行\n document.addEventListener('resize', XEUtils.debounce(resizeEvent, 100, true))\n // 在计时结束之前执行\n document.addEventListener('resize', XEUtils.debounce(resizeEvent, 100, {\n leading: true,\n trailing: false\n }))\n // 在计时结束之后执行\n document.addEventListener('resize', XEUtils.debounce(resizeEvent, 100, {\n leading: false,\n trailing: true\n }))\n\n let func = XEUtils.debounce(function (msg) {\n console.log(msg)\n }, 300)\n func('计时结束之前执行一次')\n func.cancel()\n func('取消后中重新计时,在计时结束之前执行')\n "]}]},{label:"Array",value:"array",expand:!0,children:[{name:"arrayEach",args:"obj, iterate [, context]",title:"数组迭代器",desc:"",params:[],codes:["\n XEUtils.arrayEach([11, 22, 33], (item, key) => {\n // 数组迭代器,只能用于遍历(数组或伪数组),性能高于 each\n })\n "]},{name:"lastArrayEach",args:"obj, iterate [, context]",title:" 数组迭代器,从最后开始迭代",desc:"",params:[],codes:["\n XEUtils.lastArrayEach([11, 22, 33], (item, key) => {\n // 数组迭代器,只能用于遍历(数组或伪数组),性能高于 lastEach\n })\n "]},{name:"slice",args:"array, start, end",title:"裁剪(数组或伪数组),从 start 位置开始到 end 结束,但不包括 end 本身的位置",desc:"",params:[],codes:["\n XEUtils.slice([11, 22, 33, 44], 1) // [22, 33, 44]\n XEUtils.slice([11, 22, 33, 44], 1, 3) // [22, 33]\n function method () {\n XEUtils.slice(arguments, 1, 3) // [22, 33]\n }\n method(11, 22, 33, 44)\n "]},{name:"indexOf",args:"obj, val",title:"返回对象第一个索引值",desc:"",params:[],codes:["\n XEUtils.indexOf([11, 22, 33, 22], 55) // -1\n XEUtils.indexOf([11, 22, 33, 22], 22) // 1\n "]},{name:"arrayIndexOf",args:"obj, val",title:"返回数组第一个索引值,比 indexOf 快",desc:"",params:[],codes:["\n XEUtils.arrayIndexOf([11, 22, 33, 22], 55) // -1\n XEUtils.arrayIndexOf([11, 22, 33, 22], 22) // 1\n "]},{name:"findIndexOf",args:"obj, iterate [, context]",title:"返回对象第一个索引值",desc:"",params:[],codes:["\n XEUtils.findIndexOf([11, 22, 33, 22], item => item === 55) // -1\n XEUtils.findIndexOf([11, 22, 33, 22], item => item === 22) // 1\n "]},{name:"lastIndexOf",args:"obj, val",title:"从最后开始的索引值,返回对象第一个索引值",desc:"",params:[],codes:["\n XEUtils.lastIndexOf([11, 22, 33, 22], 55) // -1\n XEUtils.lastIndexOf([11, 22, 33, 22], 22) // 3\n "]},{name:"arrayLastIndexOf",args:"obj, val",title:"从最后开始的索引值,返回数组第一个索引值,比 indexOf 快",desc:"",params:[],codes:["\n XEUtils.arrayLastIndexOf([11, 22, 33, 22], 55) // -1\n XEUtils.arrayLastIndexOf([11, 22, 33, 22], 22) // 3\n "]},{name:"findLastIndexOf",args:"obj, iterate [, context]",title:"从最后开始的索引值,返回对象第一个索引值",desc:"",params:[],codes:["\n XEUtils.findLastIndexOf([11, 22, 33, 22], item => item === 55) // -1\n XEUtils.findLastIndexOf([11, 22, 33, 22], item => item === 22) // 3\n "]},{name:"includes",args:"obj, val",title:"判断对象是否包含该值,成功返回 true 否则 false",desc:"",params:[],codes:["\n XEUtils.includes([11], 22) // false\n XEUtils.includes([11, 22], 22) // true\n "]},{name:"includeArrays",args:"array1, array2",title:"判断数组是否包含另一数组",desc:"",params:[],codes:["\n XEUtils.includeArrays([11, 22, 33], []) // true\n XEUtils.includeArrays([11, 22, 33], [11]) // true\n XEUtils.includeArrays([11, 22, 33], [22, 33]) // true\n XEUtils.includeArrays([11, 22, 33], [22, 44]) // false\n "]},{name:"remove",args:"obj, iterate",title:"移除对象属性",desc:"",params:[],codes:["\n let list1 = [11, 22, 33, 44]\n XEUtils.remove(list1, 2) // list1 = [11, 22, 44]\n let list2 = [11, 22, 33, 44]\n XEUtils.remove(list2, item => item === 22) // list2 = [11, 33, 44]\n "]},{name:"orderBy | sortBy",args:"arr, fieldConfs [, context]",title:"将数组进行排序",desc:"",codes:['\n // 数值排序\n XEUtils.orderBy([11, 55, 99, 77, 11, 55, 22])\n // [11,11,22,55,55,77,99]\n XEUtils.orderBy([11, 55, 99, 77, 11, 55, 22], { order: \'desc\' })\n // [99, 77, 55, 55, 22, 11, 11]\n\n // 字母排序\n XEUtils.orderBy([\'x\', \'z\', \'g\', \'q\', \'e\', \'b\', \'a\', \'g\', \'f\', \'c\', \'j\'])\n // ["a","b","c","e","f","g","g","j","q","x","z"]\n\n // 中文排序\n XEUtils.orderBy([\'小\', \'何\', \'李\', \'林\', \'有\', \'好\', \'啊\', \'的\', \'出\', \'库\', \'徐\'])\n // ["啊","出","的","好","何","库","李","林","小","徐","有"]\n\n // 深层对象\n XEUtils.orderBy([{ age: 27 }, { age: 26 }, { age: 28 }], \'age\')\n // [{"age":26},{"age":27},{"age":28}]\n XEUtils.orderBy([{ age: 27 }, { age: 26 }, { age: 28 }], [[\'age\', \'asc\']])\n // [{"age":26},{"age":27},{"age":28}]\n\n // 多字段排序\n XEUtils.orderBy([\n { name: \'x\', age: 26 },\n { name: \'d\', age: 27 },\n { name: \'z\', age: 26 },\n { name: \'z\', age: 24 },\n { name: \'z\', age: 25 }\n ], [[\'age\', \'asc\'], [\'name\', \'desc\']])\n // [{"name":"z","age":24},{"name":"z","age":25},{"name":"z","age":26},{"name":"x","age":26},{"name":"d","age":27}]\n\n // 自定义组合排序\n XEUtils.orderBy([\n { name: \'x\', age: 26 },\n { name: \'d\', age: 27 },\n { name: \'x\', age: 26 },\n { name: \'z\', age: 26 }\n ], [[item => item.name, \'asc\'], [item => item.age, \'desc\']])\n // [{"name":"d","age":27},{"name":"x","age":26},{"name":"x","age":26},{"name":"z","age":26}]\n ']},{name:"shuffle",args:"array",title:"将一个数组随机打乱,返回一个新的数组",desc:"",params:[],codes:["\n XEUtils.shuffle([11, 22, 33, 44, 55]) // [22, 33, 55, 11, 44]\n "]},{name:"sample",args:"array, number",title:"从一个数组中随机返回几个元素",desc:"",params:[],codes:["\n XEUtils.sample([11, 22, 33, 44, 55], 3) // [22, 33, 55]\n "]},{name:"some",args:"obj, iterate [, context]",title:"对象中的值中的每一项运行给定函数,如果函数对任一项返回 true,则返回 true,否则返回 false",desc:"",params:[],codes:["\n XEUtils.some([{value: 11}, {value: 22}], item => item.value === 55) // false\n "]},{name:"every",args:"obj, iterate [, context]",title:" 对象中的值中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true,否则返回 false",desc:"",params:[],codes:["\n XEUtils.every([{value: 11}, {value: 22}], item => item.value === 11) // false\n "]},{name:"filter",args:"obj, iterate [, context]",title:"根据回调过滤数据",desc:"",params:[],codes:["\n XEUtils.filter([{value: 11}, {value: 22}], item => item.value > 11) // [{value: 22}]\n "]},{name:"find",args:"obj, iterate [, context]",title:"查找匹配第一条数据",desc:"",params:[],codes:["\n XEUtils.find([{value: 11}, {value: 22}], item => item.value === 55) // null\n "]},{name:"findKey",args:"obj, iterate [, context]",title:"查找匹配第一条数据的键",desc:"",params:[],codes:["\n XEUtils.findKey([{value: 11}, {value: 22}], item => item.value === 22) // '1'\n XEUtils.findKey({aa: 11, bb: 22, cc: 33}, item => item === 22) // 'bb'\n "]},{name:"map",args:"obj, iterate [, context]",title:"指定方法后的返回值组成的新数组",desc:"",params:[],codes:["\n XEUtils.map([{value: 11}, {value: 22}], item => item.value) // [11, 22]\n "]},{name:"copyWithin",args:"array, target, start [, end]",title:"浅复制数组的一部分到同一数组中的另一个位置,数组大小不变",desc:"",params:[],codes:["\n XEUtils.copyWithin([11, 22, 33, 44], 0, 2) // [33, 44, 33, 44]\n XEUtils.copyWithin([11, 22, 33, 44], 0, -1) // [44, 22, 33, 44]\n "]},{name:"sum",args:"obj, iterate [, context]",title:"求和函数,将数值相加",desc:"",params:[],codes:["\n XEUtils.sum([22, 66, 88]) // 176\n XEUtils.sum([{value: 11}, {value: 22}, {value: 66}], 'value') // 99\n XEUtils.sum({val1: 21, val2: 34, val3: 47}) // 102\n "]},{name:"mean",args:"obj, iterate [, context]",title:" 求平均值函数",desc:"",params:[],codes:["\n XEUtils.mean({ val1: 21, val2: 34, val3: 47 }) // 34\n XEUtils.mean([22, 66, 60, 60]) // 52\n XEUtils.mean([{value: 34}, {value: 22}], 'value') // 28\n XEUtils.mean([{value: 11}, {value: 22}, {value: 66}], item => item.value * 2) // 66\n XEUtils.mean({val1: 21, val2: 34, val3: 45, val4: 55}) // 38.75\n "]},{name:"toArray",args:"array",title:"将对象或者伪数组转为新数组",desc:"",params:[],codes:["\n XEUtils.toArray([]) // []\n XEUtils.toArray({}) // []\n XEUtils.toArray({name: 'test1', age: 25}) // ['test1', 25]\n XEUtils.toArray(arguments) // [...]\n XEUtils.toArray(document.querySelectorAll('div')) // [...]\n "]},{name:"reduce",args:"array, iterate [, initialValue]",title:"接收一个函数作为累加器,数组中的每个值(从左到右)开始合并,最终为一个值",desc:"",params:[],codes:["\n XEUtils.reduce([22, 66, 88], (previous, item) => previous + item) // 176\n "]},{name:"zip",args:"...[]",title:"将每个数组中相应位置的值合并在一起",desc:"",params:[],codes:["\n XEUtils.zip(['name1', 'name2', 'name3'], [true, true, false], [30, 40, 20])\n // [['name1', true, 30], ['name2', true, 40], ['name3', false, 20]]\n "]},{name:"unzip",args:"arrays",title:"与 zip 相反",desc:"",params:[],codes:["\n XEUtils.unzip([['name1', true, 30], ['name2', true, 40], ['name3', false, 20]])\n // [['name1', 'name2', 'name3'], [true, true, false], [30, 40, 20]]\n "]},{name:"zipObject",args:"props, values",title:"根据键数组、值数组对转换为对象",desc:"",params:[],codes:["\n XEUtils.zipObject(['aa', 'bb', 'cc'], [11, 22, 33])\n // { aa: 11, bb: 22, cc: 33 }\n "]},{name:"uniq",args:"array",title:" 数组去重",desc:"",params:[],codes:["\n XEUtils.uniq([11, 22, 33, 33, 22, 55]) // [11, 22, 33, 55]\n "]},{name:"union",args:"...array",title:"将多个数的值返回唯一的并集数组",desc:"",params:[],codes:["\n XEUtils.union([11, 22], [33, 22], [44, 11]) // [11, 22, 33, 44]\n "]},{name:"flatten",args:"array, deep",title:"将一个多维数组拍平",desc:"",params:[],codes:["\n XEUtils.flatten([[1, 2, 3], [4, 5, 6], [7, 8]])\n // [1, 2, 3, 4, 5, 6, 7, 8]\n "]},{name:"chunk",args:"array, size",title:"将一个数组分割成大小的组。如果数组不能被平均分配,那么最后一块将是剩下的元素",desc:"",params:[],codes:["\n XEUtils.chunk(['a', 'b', 'c', 'd'], 2) // [['a', 'b'], ['c', 'd']]\n XEUtils.chunk(['a', 'b', 'c', 'd'], 3) // [['a', 'b', 'c'], ['d']]\n "]},{name:"property",args:"path",title:"返回一个获取对象属性的函数",desc:"",params:[],codes:["\n let getName = XEUtils.property('name')\n getName({name: 'test11', age: 25, height: 176}) // 'test11'\n getName({age: 25, height: 176}) // undefined\n "]},{name:"pluck",args:"array, key",title:"获取数组对象中某属性值,返回一个数组",desc:"",params:[],codes:["\n XEUtils.pluck([{a: 11, b: 22}, {a: 33, b: 44}], 'a') // [11, 33]\n XEUtils.pluck([[11, 22, 33], [44, 55, 66]], 1) // [22, 55]\n "]},{name:"invoke",args:"list, path, ...arguments",title:"在list的每个元素上执行方法,任何传递的额外参数都会在调用方法的时候传递给它",desc:"",params:[],codes:["\n XEUtils.invoke([[3, 1, 6, 7], [3, 2, 1, 8]], 'sort') // [[1, 3, 6, 7], [1, 2, 3, 8]]\n XEUtils.invoke(['123', '456'], 'split') // [['123'], ['456']]\n XEUtils.invoke([123, 456], String.prototype.split, '') // [['1', '2', '3'], ['4', '5', '6']]\n XEUtils.invoke([{a: {b: [2, 0, 1]}}, {a: {b: [2, 1]}}, {a: {b: [4, 8, 1]}}], ['a', 'b', 'sort'])\n // [[0, 1, 2], [1, 2], [1, 4, 8]]\n "]},{name:"groupBy",args:"obj, iterate [, context]",title:"集合分组,默认使用键值分组,如果有 iterate 则使用结果进行分组",desc:"",params:[],codes:["\n XEUtils.groupBy([{type: 'a'}, {type: 'b'}], 'type') // {a: [{type: 'a'}], b: [{type: 'b'}]}\n XEUtils.groupBy([{type: 'a'}, {type: 'a'}, {type: 'b'}], 'type')\n // {a: [{type: 'a'}, {type: 'a'}], b: [{type: 'b'}]}\n "]},{name:"countBy",args:"obj, iterate [, context]",title:"集合分组统计,返回各组中对象的数量统计",desc:"",params:[],codes:["\n XEUtils.countBy([{type: 'a'}, {type: 'b'}], 'type') // {a: 1, b: 1}\n XEUtils.countBy([{type: 'a'}, {type: 'a'}, {type: 'b'}], 'type') // {a: 2, b: 1}\n "]},{name:"toArrayTree",args:"array, options",title:"一个高性能的树结构转换函数,将一个带层级的数据列表转成树结构",desc:"",params:[["属性","描述","默认值"],["strict","是否严格模式,会去掉父子关联不存在数据,当子节点为空时将没有 children 属性","false"],["key","节点键值","id"],["parentKey","父节点键值","parentId"],["children","子节点属性","children"],["mapChildren","子节点映射属性",""],["sortKey","对树节点进行排序属性",""],["reverse","sortKey不为空是有效,默认升序","false"],["data","数据存放属性","null"]],codes:['\n // 默认树结构\n let list1 = [\n {id: 1, name: \'111\'},\n {id: 2, parentId: 1, name: \'222\'},\n {id: 3, name: \'333\'},\n {id: 4, parentId: 2, name: \'444\'}\n ]\n XEUtils.toArrayTree(list1)\n /*\n [\n {\n "id":1,\n "name":"111",\n "children":[\n {\n "id":2,\n "parentId":1,\n "name":"222",\n "children":[\n {\n "id":4,\n "parentId":2,\n "name":"444",\n "children":[]\n }\n ]\n }\n ]\n },\n {\n "id":3,\n "name":"333",\n "children":[]\n }\n ]\n */\n\n // 返回带排序的树结构\n let list2 = [\n {id: 1, name: \'111\', seq: 5},\n {id: 2, parentId: 1, name: \'222\', seq: 3},\n {id: 3, name: \'333\', seq: 6},\n {id: 4, parentId: 2, name: \'444\', seq: 2},\n {id: 5, parentId: 1, name: \'555\', seq: 1}\n ]\n XEUtils.toArrayTree(list2, {sortKey: \'seq\'})\n /*\n [\n {\n "id":1,\n "name":"111",\n "seq":5,\n "children":[\n {\n "id":5,\n "parentId":1,\n "name":"555",\n "seq":1,\n "children":[]\n },\n {\n "id":2,\n "parentId":1,\n "name":"222",\n "seq":3,\n "children":[\n {\n "id":4,\n "parentId":2\n ,"name":"444",\n "seq":2,\n "children":[]\n }\n ]\n }\n ]\n },\n {\n "id":3,\n "name":"333",\n "seq":6,\n "children":[]\n }\n ]\n */\n\n // 自定义数据存放属性\n let list3 = [\n {id: 1, name: \'111\'},\n {id: 2, parentId: 1, name: \'222\'},\n {id: 3, name: \'333\'},\n {id: 4, parentId: 2, name: \'444\'},\n {id: 5, parentId: 22, name: \'555\'}\n ]\n XEUtils.toArrayTree(list3, {data: \'data\'})\n /*\n [\n {\n "data":{"id":1,"name":"111"},\n "id":1,\n "children":[\n {\n "data":{"id":2,"parentId":1,"name":"222"},\n "id":2,\n "parentId":1,\n "children":[\n {\n "data":{"id":4,"parentId":2,"name":"444"},\n "id":4,\n "parentId":2,\n "children":[]\n }\n ]\n }\n ]\n },\n {\n "data":{"id":3,"name":"333"},\n "id":3,\n "children":[]\n },\n {\n "data":{"id":5,"parentId":22,"name":"555"},\n "id":5,\n "parentId":22,\n "children":[]\n }\n ]\n */\n\n // 如果设置为严格模式,(非父子关联及冗余)的数据会被忽略\n let list4 = [\n {id: 1, name: \'111\'},\n {id: 2, parentId: 1, name: \'222\'},\n {id: 3, name: \'333\'},\n {id: 4, parentId: 2, name: \'444\'},\n {id: 5, parentId: 22, name: \'555\'}\n ]\n XEUtils.toArrayTree(list4, {strict: true, parentKey: \'parentId\', key: \'id\', children: \'children\', data: \'data\'})\n /*\n [\n {\n "data":{"id":1,"name":"111"},\n "id":1,\n "children":[\n {\n "data":{"id":2,"parentId":1,"name":"222"},\n "id":2,\n "parentId":1,\n "children":[\n {\n "data":{"id":4,"parentId":2,"name":"444"},\n "id":4,\n "parentId":2,\n "children":[]\n }\n ]\n }\n ]\n },\n {\n "data":{"id":3,"name":"333"},\n "id":3,\n "children":[]\n }\n ]\n */\n ']},{name:"toTreeArray",args:"array, options",title:"将一个树结构转成数组列表",desc:"",params:[["属性","描述","默认值"],["children","子节点属性","children"],["data","数据存放属性",""],["clear","同时移除子节点属性","false"]],codes:['\n let list1 = [\n {\n "id":1,\n "name":"111",\n "children":[\n {\n "id":2,\n "parentId":1,\n "name":"222",\n "children":[\n {\n "id":4,\n "parentId":2,\n "name":"444",\n "children":[]\n }\n ]\n }\n ]\n },\n {\n "id":3,\n "name":"333",\n "children":[]\n }\n ]\n XEUtils.toTreeArray(list1)\n /*\n [\n {id: 1, name: \'111\'},\n {id: 2, parentId: 1, name: \'222\'},\n {id: 4, parentId: 2, name: \'444\'}\n {id: 3, name: \'333\'}\n ]\n */\n\n let list2 = [\n {\n "data":{"id":1,"name":"111"},\n "id":1,\n "children":[\n {\n "data":{"id":2,"parentId":1,"name":"222"},\n "id":2,\n "parentId":1,\n "children":[\n {\n "data":{"id":4,"parentId":2,"name":"444"},\n "id":4,\n "parentId":2,\n "children":[]\n }\n ]\n }\n ]\n },\n {\n "data":{"id":3,"name":"333"},\n "id":3,\n "children":[]\n },\n {\n "data":{"id":5,"parentId":22,"name":"555"},\n "id":5,\n "parentId":22,\n "children":[]\n }\n ]\n XEUtils.toTreeArray(list2, {data: \'data\'})\n /*\n [\n {id: 1, name: \'111\'},\n {id: 2, parentId: 1, name: \'222\'},\n {id: 4, parentId: 2, name: \'444\'},\n {id: 3, name: \'333\'},\n {id: 5, parentId: 22, name: \'555\'}\n ]\n */\n ']},{name:"findTree",args:"obj, iterate[, options, context]",title:"从树结构中查找匹配第一条数据的键、值、路径",desc:"",params:[["属性","描述","默认值"],["children","子节点属性","children"]],codes:["\n var tree1 = [\n { id: 1 },\n {\n id: 2,\n children: [\n { id: 20 }\n ]\n },\n {\n id: 3,\n children: [\n { id: 30 }\n ]\n }\n ]\n XEUtils.findTree(tree1, item => item.id === 20) // { item: {id: 20}, ... }\n\n var tree2 = [\n { id: 1 },\n {\n id: 2,\n childs: [\n { id: 20 }\n ]\n },\n {\n id: 3,\n