export const findNodeUpper = (ele, tag) => { if (ele.parentNode) { if (ele.parentNode.tagName === tag.toUpperCase()) { return ele.parentNode; } else { if (ele.parentNode) return findNodeUpper(ele.parentNode, tag); else return false; } } }; export const getScrollbarWidth = () => { let oP = document.createElement('p'); let styles = { width: '100px', height: '100px', overflowY: 'scroll' }; for (let i in styles) { oP.style[i] = styles[i]; } document.body.appendChild(oP); let scrollbarWidth = oP.offsetWidth - oP.clientWidth; oP.remove(); return scrollbarWidth; }; export const createNewArray = (length, content = undefined) => { let i = -1; let arr = []; while (++i < length) { let con = Array.isArray(content) ? content[i] : content; arr.push(con); } return arr; }; export const iteratorByTimes = (times, fn) => { let i = -1; while (++i < times) { fn(i); } }; export const getHeaderWords = (length) => { let wordsArr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; let headerArr = []; if (length <= 26) { headerArr = wordsArr.slice(0, length); } else { headerArr = [...wordsArr]; let num = length - 26; let firstWordIndex = 0; let secondWordIndex = 0; let i = -1; while (++i < num) { firstWordIndex = Math.floor(i / 26); secondWordIndex = i % 26; let sumWord = `${wordsArr[firstWordIndex]}${wordsArr[secondWordIndex]}`; headerArr.push(sumWord); } } return headerArr; }; // 获取数组中第一个不为空的值 export const getFirstNotNullValue = (array, index) => { if (!(array && array.length)) return false; let r = -1; let rowLength = array.length; while (++r < rowLength) { let item = array[r][index]; if (item || item === 0) return item; } return false; }; export const sortArr = (arr, index) => { const isChineseReg = new RegExp('[\\u4E00-\\u9FFF]+', 'g'); if (arr.length <= 1) return; const firstNotNullValue = getFirstNotNullValue(arr, index); if (!firstNotNullValue && firstNotNullValue !== 0) return; if (!isChineseReg.test(firstNotNullValue)) { if (isNaN(Number(firstNotNullValue))) { // 非中文非数值 arr.sort(); } else { // 数值型 arr.sort((a, b) => { return a[index] - b[index]; }); } } else { arr.sort((a, b) => { return a[index].localeCompare(b[index], 'zh'); }); } }; // 倒序 export const sortDesArr = (arr, index) => { const isChineseReg = new RegExp('[\\u4E00-\\u9FFF]+', 'g'); if (arr.length <= 1) return; const firstNotNullValue = getFirstNotNullValue(arr, index); if (!firstNotNullValue && firstNotNullValue !== 0) return; if (!isChineseReg.test(firstNotNullValue)) { if (isNaN(Number(firstNotNullValue))) { // 非中文非数值 arr.sort().reverse(); } else { // 数值型 arr.sort((a, b) => { return b[index] - a[index]; }); } } else { arr.sort((a, b) => { return b[index].localeCompare(a[index], 'zh'); }); } }; export const hasOneOf = (str, targetArr) => { let len = targetArr.length; let i = -1; while (++i < len) { if (str.indexOf(targetArr[i]) >= 0) { return true; } } return false; }; export const oneOf = (ele, targetArr) => { return targetArr.indexOf(ele) > -1; };