admin管理员组

文章数量:1794759

utils

utils

这里写目录标题

  • 闭包获取点击的那一个
  • 随机数:filesId
  • 获取UUID:generateUUID
  • 数组中某元素最小值
  • 四舍五入round
  • 判断'1.'(JS中1.为数组)
  • 逻辑与非有优先级,&&会优先计算
  • 元转分regYuanToFen
  • 计算剩余天数 getRestDay
  • 对象数组
    • 抽取对象数组中指定的key值
    • 数组查集
    • 数组查集
    • 对象数组去重
    • 对象数组根据id查找交集
  • 数组
    • some:
    • 数组包含
    • 数组交集
    • 数组全等
    • 数组转字符串
  • 层级树
    • 层级树根据最里层过滤
    • 树结构递归
  • 面试题
    • 对数组的 filter, map, reduce 方法对以下数据做处理,使得输出结果为 '256'
    • 如何快速创建一个长度为100,元素都为1的数组
    • promise

闭包获取点击的那一个

this.handleClick=(item)=>{
return ()=>{console.log(item). //拿到了用户点击的那个}
}Arr.map(item=><div onClick={this.handleClick()}></div>)

随机数:filesId

function filesId(length?: number) {const len = length || 32;const chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';const maxPos = chars.length;let pwd = '';for (let i = 0; i < len; i++) {pwd += chars.charAt(Math.floor(Math.random() * maxPos));}return pwd;}

获取UUID:generateUUID

function generateUUID() {function S4() {const r = (1 + Math.random()) * 0x10000;return (r || 0).toString(16).substring(1);}return `${S4()}${S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;
};

数组中某元素最小值

const lowest = (categories, keyword) => {return categories.reduce((pre, curv) => {return pre[keyword] < curv[keyword] ? pre : curv;}, {});};const obj = {lowestPrice: lowest(goods.dishSkuVOS || [], 'sellPrice'),lowestInventory: lowest(goods.dishSkuVOS || [], 'inventory')}

四舍五入round

 /*  中科学计数法相关的知识对于极大或者极小的数,可以用科学计数法 e来表示的浮点数值来表示。科学计数法允许字母e 或 E 的后面,跟着一个整数,表示这个数值的指数部分。*/function round(number, precision) {return Math.round(`${+number}e${precision}`) / Math.pow(10, precision);}// 计算价格,保留两位小数,四舍五入,最小 0.01function getPrice(discountType, originPrice, discountAmount) {let price = 0;// 折扣:原价5元,输入2,则打2折switch (discountType) {case 'DISCOUNT':price = round((originPrice * discountAmount) / 10, 2);break;// 立减:原价5元,输入2,则返回3元case 'REDUCE':price = round(originPrice - discountAmount, 2);break;// 特价:原价5元,输入特价2元,则返回2元case 'ONE_PRICE':price = round(discountAmount, 2);break;default:price = 0;break;}return price;}console.log(getPrice('ONE_PRICE', 22, 10));

isNotCompleteNumber:判断不是数字的返回true,是数字返回false:

判断’1.’(JS中1.为数组)

num.toString().indexOf('.') === num.toString().length - 1 

判断’1.'小数点在最后一位则不是数字
JS中默认’1.'是数字,返回false。

逻辑与非有优先级,&&会优先计算

 const isNotCompleteNumber = (num) => {return isNaN(num) || num === '' || num === null || num && num.toString().indexOf('.') === num.toString().length - 1;
};

元转分regYuanToFen

  abs = function (val) {//金额转换 分->元 保留2位小数 并每隔3位用逗号分开 1,234.56var str = (val / 100).toFixed(2) + "";var intSum = str.substring(0, str.indexOf(".")).replace(/\B(?=(?:\d{3})+$)/g, ","); //取到整数部分var dot = str.substring(str.length, str.indexOf(".")); //取到小数部分搜索var ret = intSum + dot;return ret;};abd = function (val) {//金额转换 分->元 保留2位小数 并每隔3位用逗号分开 1,234.56var str = (val / 100).toFixed(2) + "";var intSum = str.substring(0, str.indexOf(".")).replace(/\B(?=(?:\d{3})+$)/g, ","); //取到整数部分var dot = str.substring(str.length, str.indexOf(".")); //取到小数部分搜索var ret = intSum + dot;return ret;};
      // 元转分 - 解决精度问题 yuan:要转换的钱,单位元; digit:转换倍数const regYuanToFen = (yuan, digit) => {yuan = Number(yuan);digit = Number(digit);var m = 0,s1 = yuan.toString(),s2 = digit.toString();try {m += s1.split(".")[1].length;} catch (e) {}try {m += s2.split(".")[1].length;} catch (e) {}return ((Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /Math.pow(10, m));};console.log(abs(32));// console.log(regFenToYuan("12"));console.log(regYuanToFen("100.00", 1));

计算剩余天数 getRestDay

const getRestDay = () => {
const endTime = new Date(applyEndTime);
const now = new Date();
const res = endTime.getTime() - now.getTime();
const day = res / (60 * 60 * 24 * 1000);
return Math.round(day);
};

对象数组

抽取对象数组中指定的key值

// 提取一个包含键值的数组,其中。foo的值[1, 3, 5]...const objArray = [ // 使用商品和对应门店{dishId: '200000000744450977',dishType: 'SINGLE',dishName: '菜品1',unitName: '份',dishImgId: '.JPEG',sellPrice: '4.44',inventory: '10000',multiSpecFlag: 'N',state: 'ONLINE',shopId: '2147566755', // 门店IDshopName: '门店a',dishSkuVOS: [{inventory: '10000',sellPrice: '4.44',skuId: '200000000779266977',skuShopRelationAll: true,skuName: '菜品1',},],},{dishId: '200000000744450977',dishType: 'SINGLE',dishName: '菜品1',unitName: '份',dishImgId: '.JPEG',sellPrice: '4.44',inventory: '10000',multiSpecFlag: 'N',state: 'ONLINE',shopId: '2147566756', // 门店IDshopName: '门店b',dishSkuVOS: [{inventory: '10000',sellPrice: '4.44',skuId: '200000000779266977',skuShopRelationAll: true,skuName: '菜品1',},],},{dishId: '200000000744450977',dishType: 'SINGLE',dishName: '菜品1',unitName: '份',dishImgId: '.JPEG',sellPrice: '4.44',inventory: '10000',multiSpecFlag: 'N',state: 'ONLINE',shopId: '3147566756', // 门店IDshopName: '门店c',dishSkuVOS: [{inventory: '10000',sellPrice: '4.44',skuId: '200000000779266977',skuShopRelationAll: true,skuName: '菜品1',},],},];function getFields(input, field) {const output = [];for (let i = 0; i < input.length; ++i)output.push(input[i][field]);return output;}let result = getFields(objArray, "shopId"); // returns [ 1, 3, 5 ]console.log(result);

数组查集

    var uuidArr = ["bbb", "vvv", "aaa", "fff", "fff"], flag = true;var arr1 = [{ "rolename": "aaa" },{ "rolename": "bbb" },{ "rolename": "ccc" },{ "rolename": "ddd" }];var arr2 = [{ "rolename": "eee" },{ "rolename": "ccc" },{ "rolename": "aaa" },{ "rolename": "fff" }];

数组查集

    // for (let i = 0; i < uuidArr.length; i++) {//   for (let j = i + 1; j < uuidArr.length; j++) {//     if (uuidArr[i] == uuidArr[j]) {//       flag = false;//       break;//     }//   }// }// if (!flag) {//   alert("有相同项!");// } else {//   alert("都不相同")// }//数组求差function getSubtract(unionArr, subsetArr) {let new_tmp = new Array();for (var i = 0; i < unionArr.length; i++) {var flag = true;for (var j = 0; j < subsetArr.length; j++) {if (unionArr[i].rolename == subsetArr[j].rolename) {flag = false;}}if (flag) {new_tmp.push(unionArr[i]);}}return new_tmp;}var subtract = getSubtract(arr1, arr2);console.log(subtract)// ————————————————

对象数组去重

 var songs = [{ name: "羽根", artist: "air" },{ name: "羽根", artist: "air" },{ name: "晴天", artist: "周杰伦" },{ name: "晴天", artist: "周杰伦" },{ artist: "周杰伦", name: "晴天" }];function unique(songs) {let result = {};let finalResult = [];for (let i = 0; i < songs.length; i++) {result[songs[i].name] = songs[i];//因为songs[i].name不能重复,达到去重效果,且这里必须知晓"name"或是其他键名}//console.log(result);{"羽根":{name:"羽根",artist:"air"},"晴天":{name:"晴天",artist:"周杰伦"}}//现在result内部都是不重复的对象了,只需要将其键值取出来转为数组即可for (item in result) {finalResult.push(result[item]);}//console.log(finalResult);[{name:"羽根",artist:"air"},{name:"晴天",artist:"周杰伦"}]return finalResult;}console.log(unique(songs));

对象数组根据id查找交集

 let arr1 = [{ id: 1, name: '网' }, { id: 2, name: '二位' }]let arr2 = [{ id: 1, name: '问问' }, { id: 2, name: '多少1' }, { id: 44, name: '多少2' }, { id: 45, name: '多少3' },]let add = arr2.filter(item => arr1.some(ele => ele.id === item.id))console.log(add)对象数组中的最大值var array = [{"id": 52354541,"name": "比率","value": "55"},{"id": 43563123,"name": "比率","value": "88"},{"id": 32525763,"name": "比率","value": "76"}];array.reduce(function (pre, curv) {return pre.value < curv.value ? curv : pre;}).id

数组

some:

  • 案例:
//查看商品是否选择:返回some进行检测id是否已选择
infos.some(g => g?.sId === catogary.sId) && skus.some(d => d?.bId === bId);
//filter&some两个数组数据类型过滤
arr1.filter(a1=>arr2.some(a2.id===a1.id))

数组包含

  // 只能判断元素为简单数组类型;判断b是否包含在a中var a = [1, 2, 7, 6];var b = [6, 7, 2];function isContained(aa, bb) {if (!(aa instanceof Array) || !(bb instanceof Array) || ((aa.length < bb.length))) {return false;}var aaStr = aa.toString();for (var i = 0; i < bb.length; i++) {if (aaStr.indexOf(bb[i]) < 0) return false;}return true;}var c = isContained(a, b);console.log(c);

数组交集

  var a = [1, 2, 3, 4, 5]var b = [2, 4, 6, 8, 10]//交集a和b的交集var c = a.filter(function (v) { return b.indexOf(v) > -1 })console.log(c);

数组全等

  function equar(a, b) {// 判断数组的长度if (a.length !== b.length) {return false} else {// 循环遍历数组的值进行比较for (let i = 0; i < a.length; i++) {if (a[i] !== b[i]) {return false}}return true;}}console.log(equar([222, 333], [222, 333]))

数组转字符串

   var a = [{ name: 'zhangsan', age: '11' }, { name: 'wangwu', age: '12' }]var b = [{ name: 'zhangsan', age: '11' }, { name: 'wang', age: '22' }]// var newa = a.join(',')[Object Object] // var newb = b.toString() [Object Object]console.log(newa, newb)console.log(newa.includes(newb))

层级树

层级树根据最里层过滤

    let data = [{"categoryId": "91000033","children": [{"categoryId": "91612215","children": [{"categoryId": "99672434","children": [{"categoryId": "94574713","children": [{"categoryId": "1895621","children": [],"categoryName": "肯德基宅急送(荡口古镇店)","storeCount": 1,"type": "STORE","class": "com.alsc.posanization.client.model.dto.storebycity.StoreGroupNodeDTO","extInfo": {"tbStoreId": "236656440","tbSellerId": "2201121248912","outMerchantAccount": "91000033","hasMergeToTb": "true","parentId": "94574713"}}],"categoryName": "新店","storeCount": 1,"type": "CHAIN","class": "com.alsc.posanization.client.model.dto.storebycity.StoreGroupNodeDTO","extInfo": {"tbStoreId": "null","hasMergeToTb": "null","parentId": "99672434"}}],"categoryName": "无锡肯德基有限公司","storeCount": 1,"type": "CHAIN","class": "com.alsc.posanization.client.model.dto.storebycity.StoreGroupNodeDTO","extInfo": {"tbStoreId": "null","hasMergeToTb": "null","parentId": "91612215"}}],"categoryName": "肯德基宅急送全国","storeCount": 1,"type": "CHAIN","class": "com.alsc.posanization.client.model.dto.storebycity.StoreGroupNodeDTO","extInfo": {"tbStoreId": "null","hasMergeToTb": "null","parentId": "91000033"}}],"categoryName": "肯德基宅急送","storeCount": 1,"type": "CHAIN","class": "com.alsc.posanization.client.model.dto.storebycity.StoreGroupNodeDTO","extInfo": {"tbStoreId": "null","hasMergeToTb": "null","parentId": "0"}}]// function f(arr, selectedKey) {//   debugger;//   return arr.filter(item => item.categoryId !== selectedKey).map(item => {//     item = Object.assign({}, item)//     if (item.children) {//       item.children = f(item.children, selectedKey)//     }//     return item//   })// }function filterTree(tree = [], map = [], arr = []) {if (!tree.length) return []for (let item of tree) {if (!map.includes(item.id)) continuelet node = { ...item, children: [] }arr.push(node)if (item.children && item.children.length) filterTree(item.children, map, node.children)}return arr}// console.log(f(data, '1895621'))console.log(filterTree(data, ['1895622']))

树结构递归

//先对数据进行扁平化再递归
/*** @param {Array} treeArr 树型数组*/
const treeToFloatTypeFn = (treeArr = [], key) => {let newTree = []; // 生成一个新的平型(function treeToFloatType(chArr) {chArr.forEach(ele => { // 遍历树型let newObj = {}const keys = Object.keys(ele) // 获取每个树形对象中的key []keys.forEach(el => { // 遍历keyif (ele.hasOwnProperty(el)) { // 判断是否是继承属性if (ele[el] instanceof Array && ele[el] !== null) {// 对象且非空 递归treeToFloatType(ele[el])} else {// 非对象newObj[el] = ele[el]}}})newTree.unshift(newObj)});})(treeArr)return newTree
}
console.log(treeToFloatTypeFn(storeArr.data.data.children))

面试题

对数组的 filter, map, reduce 方法对以下数据做处理,使得输出结果为 ‘256’

   const arys = [{ a: 6 }, { a: 1 }, { a: 5 }, { a: 2 }];let result = arys.filter(ary => ary.a !== 1).map(element => element.a);console.log(result.sort().join(''));

如何快速创建一个长度为100,元素都为1的数组

const arr = Array(100);
const newArr = arr.fill(1);

promise

async function test(){await setTimeout(()=>{console.log(1);},0);console.log(2);
}test()//输出什么

本文标签: utils