UNPKG

qm-bus

Version:

千米公有云业务组件库

224 lines (214 loc) 5.7 kB
/** * @name QM.Array * @class * @description 数组的一些方法 */ var assign = require('object-assign') var _Array = (module.exports = {}) //下面有一个Array的引用 , 不这样不行呀 _Array.mixin = function(arrays, v, propertyName, howMerge) { var _this = arrays if (_Array.isArray(v)) { var res = [] v.forEach(function(item) { var _arr = _Array.mixin(_this, item, propertyName, howMerge) res = res.concat(_arr) }) return res } if (typeof propertyName == 'function') { var res = [] _this.forEach(function(t, k) { if (propertyName(v, t)) { if (typeof howMerge == 'function') { _this[k] = howMerge(v, _this[k]) } else { _this[k] = assign(_this[k], v) } res = res.concat([assign({}, _this[k])]) } }) return res } var res = [] var i = _Array.indexOf(_this, v, propertyName) if (i > -1) { if (typeof howMerge == 'function') { _this[i] = howMerge(v, _this[i]) } else { _this[i] = assign(_this[i], v) } return (res = res.concat([assign({}, _this[i])])) } return res } _Array.upush = function(arrays, v, propertyName, isMerge) { if (typeof v == 'function') { arrays.push(v) return arrays } else if (typeof propertyName == 'function') { var _this = arrays _this.forEach(function(t, k) { if (propertyName(v, t)) { if (isMerge) { _this[k] = assign(_this[k], v) } return _this } }) _this.push(v) return _this } var i = _Array.indexOf(_this, v, propertyName) if (i == -1) { _this.push(v) } else if (isMerge) { _this[i] = assign(_this[i], v) } return _this } _Array.umerge = function(arrays, v, propertyName, isMerge) { var _this = arrays if (v instanceof Array) { v.forEach(function(item) { _Array.upush(_this, item, propertyName, isMerge) }) } else { _Array.upush(_this, v, propertyName, isMerge) } return _this } /** * * @param value * @param propertyName 如何设置, 将会判断这个对象的属性值在这个数组里面是否有重复 * @returns */ _Array.indexOf = function(arrays, value, propertyName) { var _this = arrays var i for (i = 0; i < _this.length; i++) { if (!propertyName) { var l = typeof _this[i] == 'string' ? _this[i].trim() : _this[i] var r = typeof value == 'string' ? value.trim() : value if (l == r) { return i } } else if (propertyName) { if (typeof propertyName == 'function') { if (propertyName(value, _this[i])) { return i } } else if (this.isArray(propertyName)) { var allEq = true for (var j = 0; j < propertyName.length; j++) { var l = typeof _this[i][propertyName[j]] == 'string' ? _this[i][propertyName[j]].trim() : _this[i][propertyName[j]] var r = typeof value[propertyName[j]] == 'string' ? value[propertyName[j]].trim() : value[propertyName[j]] if (l != r) { allEq = false break } } if (allEq) { return i } } else { var l = typeof _this[i][propertyName] == 'string' ? _this[i][propertyName].trim() : _this[i][propertyName] var r = typeof value[propertyName] == 'string' ? value[propertyName].trim() : value[propertyName] if (l == r) { return i } } } } return -1 } ;(_Array.contain = function(arrays, obj, propertyName) { if (typeof obj == 'function') return null return _Array.indexOf(arrays, obj, propertyName) != -1 }), (_Array.remove = function(arrays, val, propertyName) { if (typeof val == 'function') return null var i = _Array.indexOf(arrays, val, propertyName) return i != -1 ? arrays.splice(i, 1) : [] }) _Array.treeSort = function(arrays, idProp, pidProp, startWith) { var arrs = [] var _this = arrays var children = (arr, pid, deep) => { deep = deep || 0 var childList = [] arr.forEach((v, k) => { if (v[pidProp] == pid) { arrs.push(v) childList.push(v) var child = children(arr, v[idProp], deep + 1) if (!child.length) { v.NODE_LEAF = true } v.NODE_DEEP = deep + 1 } }) return childList } children(_this, startWith || 0) return arrs } _Array.tree = function(arrays, idProp, pidProp, startWith, process) { var arrs = [] var _this = arrays var children = (_arr, pid, deep, pos) => { deep = deep || 0 pos = pos || [0] var childList = [] if (_arr && _arr instanceof Array) { _arr.forEach(v => { if (v[pidProp] == pid) { var _pos = [].concat(pos) _pos.push(childList.length) v.NODE_POSITION = _pos var child = children(_arr, v[idProp], deep + 1, [].concat(_pos)) v.childNodes = child if (!child.length) { v.NODE_LEAF = true } v.NODE_DEEP = deep + 1 process && process(v) childList.push(assign({}, v)) } }) } return childList } return children(_this, startWith || 0) } /** * 判断是不是数组 * * @param arr * @returns {boolean} */ _Array.isArray = function(arrays) { return Object.prototype.toString.call(arrays) === '[object Array]' } /** * 获取数组中的元素 */ _Array.get = function(arr, propertyValue, propertyName) { var val = null arr.map(function(v, k) { if (v[propertyName] == propertyValue) { val = v } }) return val }