shu-c-view
Version:
rollup 打包vue@2.7组件库框架
85 lines (73 loc) • 1.77 kB
JavaScript
const kebabCase = function(str) {
const hyphenateRE = /([^-])([A-Z])/g;
return str
.replace(hyphenateRE, '$1-$2')
.replace(hyphenateRE, '$1-$2')
.toLowerCase();
};
function isObject(obj) {
return Object.prototype.toString.call(obj) === '[object Object]';
}
const looseEqual = function(a, b) {
const isObjectA = isObject(a);
const isObjectB = isObject(b);
if (isObjectA && isObjectB) {
return JSON.stringify(a) === JSON.stringify(b);
}
if (!isObjectA && !isObjectB) {
return String(a) === String(b);
}
return false;
};
const arrayEquals = function(arrayA, arrayB) {
arrayA = arrayA || [];
arrayB = arrayB || [];
if (arrayA.length !== arrayB.length) {
return false;
}
for (let i = 0; i < arrayA.length; i += 1) {
if (!looseEqual(arrayA[i], arrayB[i])) {
return false;
}
}
return true;
};
const isEqual = function(value1, value2) {
if (Array.isArray(value1) && Array.isArray(value2)) {
return arrayEquals(value1, value2);
}
return looseEqual(value1, value2);
};
const isEmpty = function(val) {
// null or undefined
if (val === null) {
return true;
}
if (typeof val === 'boolean') {
return false;
}
if (typeof val === 'number') {
return !val;
}
if (val instanceof Error) {
return val.message === '';
}
switch (Object.prototype.toString.call(val)) {
// String or Array
case '[object String]':
case '[object Array]':
return !val.length;
// Map or Set or File
case '[object File]':
case '[object Map]':
case '[object Set]': {
return !val.size;
}
// Plain Object
case '[object Object]': {
return !Object.keys(val).length;
}
}
return false;
};
export { kebabCase, isEqual, isEmpty };