UNPKG

xms-basic-util

Version:

js基础工具类集合,集成方便后期调用,通过webpack编译,支持多种平台,如es6、node、浏览器引入等 ## 使用 ### es6方法 - 安装 ``` npm install xms-basic-util ``` - 导入 ``` import xmsBasicUtil from 'xms-basic-util' //日期转换工具对象 const dateFormat = xmsBasicUtil.dateFormat; //数字处理工具对象 const mathUtil = xmsBasicUt

132 lines (120 loc) 3.54 kB
/** * 针对数组排序问题解答 * @type {*[]} */ // 测试数据 const extensions = [ { firstName: 'a', lastName: 'pn', ext: 33, extType: 'DigitalUser' }, { firstName: 'b', lastName: 'pn', ext: 32, extType: 'DigitalUser' }, { firstName: 'a', lastName: 'pn', ext: 50, extType: 'AO' }, { firstName: 'a', lastName: 'ab', ext: '123', extType: 'AO' }, { firstName: 'b', lastName: 'pn', ext: 40, extType: 'Dept' }, { firstName: 'b', lastName: '', ext: '34', extType: 'AO' }, { firstName: 'b', lastName: 'nb', ext: '', extType: 'VirtualUser' }, { firstName: 'en', lastName: 'ww', ext: 32, extType: 'FaxUser' } ] // extType的排序数据 const extTypeSort = ['Dept', 'AO', 'FaxUser', 'VirtualUser', 'DigitalUser'] /** * 排序方法、只支持升序 * @param item1 * @param item2 * @param propArray 排序属性数组 * @returns {boolean|*} */ function ascSort (item1, item2, propArray) { const compareArray = [] for (let i = 0; i < propArray.length; i++) { const prop = propArray[i] if (item1[prop] > item2[prop]) { compareArray.push(1) break } else if (item1[prop] === item2[prop]) { compareArray.push(0) } else { compareArray.push(-1) break } } for (let j = 0; j < compareArray.length; j++) { if (compareArray[j] === 1 || compareArray[j] === -1) { return compareArray[j] } } return false } /** * sort extensions by "firstName" + "lastName" + "ext" ASC * @param extensions */ function sortExtensionsByName (extensions) { const sortProp = ['firstName', 'lastName', 'ext'] extensions.sort((a, b) => { return ascSort(a, b, sortProp) }) return extensions } /** * sort extensions by extType follow these orders ASC * 方法一:执行效率更高,数据量大推荐使用 * @param extensions * @returns {Array} */ function sortExtensionsByExtType (extensions) { let array = [] const map = {} // 转化成map extensions.forEach(item => { map[item.extType] = map[item.extType] || [] map[item.extType].push(item) }) extTypeSort.forEach(extType => { array = array.concat(map[extType]) }) return array } /** * sort extensions by extType follow these orders ASC * 方法二:代码比较少,数据量少可以使用 * @param extensions * @returns {Array} */ function sortExtensionsByExtType1 (extensions) { const array = [] extTypeSort.forEach(extType => { extensions.forEach(item => { if (item.extType === extType) { array.push(item) } }) }) return array } /** * 数组过滤 * @param allKeys * @param usedKeys * @returns Array */ function getUnUsedKeys (allKeys, usedKeys = []) { const dataType = Object.prototype.toString.call(allKeys) if (dataType === '[object Number]') { const array = [] for (let i = 0; i <= allKeys; i++) { array.push(i) } return array.filter(key => !usedKeys.includes(key)) } else if (dataType === '[object Array]') { return allKeys.filter(key => !usedKeys.includes(key)) } else { console.log('allKeys should be an array or number') } } // 名称排序 console.log('sortExtensionsByName:%o', sortExtensionsByName(extensions)) // extType 按指定数组排序 console.log('sortExtensionsByExtType:%o', sortExtensionsByExtType(extensions)) // extType 按指定数组排序 console.log('sortExtensionsByExtType1:%o', sortExtensionsByExtType1(extensions)) // getUnUsedKeys 按指定数组排序 console.log('getUnUsedKeys:%o', getUnUsedKeys(100, [1, 2, 3, 4, 5, 2, 3, 4, 100]))