tongtong-utils
Version:
String类
336 lines (307 loc) • 11.2 kB
JavaScript
;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
require("./string");
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); } }
Object.clone = function (obj) {
var func = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!obj || !(obj instanceof Object) || typeof obj == "function") {
if (typeof obj == "function" && func) {
return null;
}
return obj;
}
var constructor = obj.constructor;
var result = new constructor();
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = Object.clone(obj[key]);
}
}
return result;
};
Object.extend = function (target, object1) {
if (object1 && (typeof object1 === "undefined" ? "undefined" : _typeof(object1)) === "object") {
for (var key in object1) {
if (object1.hasOwnProperty(key)) {
//判断ojb子元素是否为对象,如果是,递归复制
if (object1[key] && _typeof(object1[key]) === "object" && !(object1[key] instanceof Array) && !(object1[key] instanceof Function) && !(object1[key] instanceof RegExp)) {
target[key] = Object.extend((target[key] instanceof Function ? {} : target[key]) || (object1[key] instanceof Array ? [] : {}), object1[key]);
} else if (object1[key] instanceof Array) {
//如果不是,简单复制
target[key] = [].concat(_toConsumableArray(object1[key]));
} else {
//如果不是,简单复制
target[key] = object1[key];
}
}
}
}
for (var i = 2; i < arguments.length; i++) {
Object.extend(target, arguments[i]);
}
return target;
};
var getValueX = function getValueX(object, field) {
var repeat = [];
var totalIndex = 0;
var fields = field.split(".");
var fs = fields.map(function (f, i) {
return fields.slice(0, i + 1).join(".");
});
var variable = [];
var maxIndex = 10;
if (fields.every(function (f) {
return f !== "*";
})) {
maxIndex = fields.length;
}
var getKeys = function getKeys(subObjects) {
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
if (index > maxIndex || totalIndex > 10000) {
return undefined;
}
variable[index] = {};
for (var subObjectKey in subObjects) {
var subObject = subObjects[subObjectKey];
for (var key in subObject) {
totalIndex++;
try {
var val = subObject[key];
if ((subObjectKey ? field.includes('.') : true) && String.test(subObjectKey + key, field)) {
return val;
}
if (val instanceof Object && !repeat.includes(val) && String.testSome(subObjectKey + key, fs.slice(0, index))) {
repeat.push(val);
variable[index][subObjectKey + key + "."] = val;
}
} catch (ex) {
continue;
}
}
}
return Object.isEmpty(variable[index]) || index > maxIndex ? undefined : getKeys(variable[index], index + 1);
};
return getKeys({ "": object });
};
var getValue = function getValue(object, field) {
var fields = field.split('.');
var result = _extends({}, object);
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = fields[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
if (result !== undefined && result !== null && result[key] !== undefined) {
result = result[key];
} else {
return undefined;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return result;
};
Object.getValue = function (object, field, defaultValue) {
if (!field) {
return object;
}
if (!object || !Object.keys(object).length || !field) {
return defaultValue;
}
if (String.replaceAlls) {
field = String.replaceAlls(field, ['[', ']', '"', "'"], ['.', '', '', '']);
}
var fields = field.split('|');
var result = defaultValue;
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = fields[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var f = _step2.value;
var res = ~f.indexOf('*') ? getValueX(object, f) : getValue(object, f);
if (res !== undefined) {
result = res;
if (res !== null) {
break;
}
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return result === undefined || result === null ? defaultValue : result;
};
Object.setValue = function (object, field, value) {
var force = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
if (!field) {
object = value;
return object;
}
if (!object) {
object = {};
}
var fields = field.split ? field.split('.') : field;
var result = object;
for (var i = 0; i < fields.length - 1; i++) {
var key = fields[i];
if (_typeof(result[key]) === 'object') {
result = result[key];
} else {
if (force) {
result[key] = {};
result = result[key];
} else {
break;
}
}
}
var lastField = fields.pop();
var obj = Object.getValue(object, fields.join('.'));
if (obj) {
obj[lastField] = value;
}
return object;
};
// 判断对象是否为空,except为除外的属性, except为数组,支持字符串与正则匹配
Object.isEmpty = function (object) {
var except = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (!object) {
return true;
}
var _loop = function _loop(key) {
if (except && except.some(function (ex) {
return typeof ex === "string" ? ex === key : ex.test(key);
})) {
return "continue";
}
if (object.hasOwnProperty(key)) {
return {
v: false
};
}
};
for (var key in object) {
var _ret = _loop(key);
switch (_ret) {
case "continue":
continue;
default:
if ((typeof _ret === "undefined" ? "undefined" : _typeof(_ret)) === "object") return _ret.v;
}
}
return true;
};
Object.toStr = function (object) {
return JSON.stringify(Object.clone(object));
};
Object.equal = function (object1, object2) {
return Object.toStr(object1) === Object.toStr(object2);
};
Object.changeList = function (object1, object2) {
if (!object1) {
object1 = {};
}
if (!object2) {
object2 = {};
}
var changes = [];
for (var key in object1) {
if (object1[key] !== object2[key]) {
!changes.includes(key) && changes.push(key);
}
}
for (var _key in object2) {
if (object1[_key] !== object2[_key]) {
!changes.includes(_key) && changes.push(_key);
}
}
return changes;
};
Object.renderText = function (text, object, rewrite) {
if (!text || Object.isEmpty(object)) {
return text;
}
var fields = String.Resovles(text, '${', '}') || [];
for (var i = 0; i < fields.length; i++) {
var field = fields[i];
var newField = field;
if (rewrite) {
for (var rewriteKey in rewrite) {
newField = String.replaceAll(field, rewriteKey, rewrite[rewriteKey]);
}
}
var result = Object.getValue(object, newField, '');
if ('${' + field + '}' === text) {
return result;
}
text = String.replaceAll(text, '${' + field + '}', String.toString(result));
}
return text;
};
Object.renderRecord = function (text, object, rewrite) {
if (!text || Object.isEmpty(object)) {
return text;
}
var expressions = String.Resovles(text, '[#', '#]') || [];
if (expressions && expressions.length) {
for (var i = 0; i < expressions.length; i++) {
var expression = expressions[i];
var exp = Object.renderText(expression, object, rewrite);
try {
exp = eval(exp);
if ('[#' + expression + '#]' === text) {
return exp;
}
exp = exp === null || exp === undefined ? '' : String.toString(exp);
} catch (ex) {
console.log(exp, ex);
}
text = text.toString().replace('[#' + expression + '#]', exp);
}
}
return Object.renderText(text, object, rewrite);
};
Object.renderObject = function (obj, object, rewrite) {
for (var key in obj) {
switch (_typeof(obj[key])) {
case 'string':
obj[key] = Object.renderRecord(obj[key], object, rewrite);
break;
case 'object':
Object.renderObject(obj[key], object, rewrite);
break;
}
}
return obj;
};
Object.renderArray = function (arr, obj, object) {
return arr.map(function (s, index) {
return _extends({}, s, Object.renderObject(Object.clone(obj), _extends({}, object, { item: s }, s), { '[index]': "[" + index + "]" }));
});
};