美文网首页
工具方法

工具方法

作者: Angel_6c4e | 来源:发表于2021-04-01 17:20 被阅读0次

对象数组如何去重:

//根据每个对象的某一个具体属性来进行去重
const responseList = [
  { id: 1, a: 1 },
  { id: 2, a: 2 },
  { id: 3, a: 3 },
  { id: 1, a: 4 },
];
const result = responseList.reduce((acc, cur) => {
    const ids = acc.map(item => item.id);
    return ids.includes(cur.id) ? acc : [...acc, cur];
}, []);
console.log(result); // -> [ { id: 1, a: 1}, {id: 2, a: 2}, {id: 3, a: 3} ]

reduce 实现对象数组去重复:

var resources = [
    { name: "张三", age: "18" },
    { name: "张三", age: "19" },
    { name: "张三", age: "20" },
    { name: "李四", age: "19" },
    { name: "王五", age: "20" },
    { name: "赵六", age: "21" }
]
var temp = {};
resources = resources.reduce((prev, curv) => {
 // 如果临时对象中有这个名字,什么都不做
 if (temp[curv.name]) {
 
 }else {
    // 如果临时对象没有就把这个名字加进去,同时把当前的这个对象加入到prev中
    temp[curv.name] = true;
    prev.push(curv);
 }
 return prev
}, []);
console.log("结果", resources);

实现一个函数判断数据类型:

function getType(obj) {
   if (obj === null) return String(obj);
   return typeof obj === 'object' 
   ? Object.prototype.toString.call(obj).replace('[object ', '').replace(']', '').toLowerCase()
   : typeof obj;
}

// 调用
getType(null); // -> null
getType(undefined); // -> undefined
getType({}); // -> object
getType([]); // -> array
getType(123); // -> number
getType(true); // -> boolean
getType('123'); // -> string
getType(/123/); // -> regexp
getType(new Date()); // -> date

查找字符串中出现最多的字符和个数:

// 例: abbcccddddd -> 字符最多的是d,出现了5次

let str = "abcabcabcbbccccc";
let num = 0;
let char = '';

 // 使其按照一定的次序排列
str = str.split('').sort().join('');
// "aaabbbbbcccccccc"

// 定义正则表达式
let re = /(\w)\1+/g;
str.replace(re,($0,$1) => {
    if(num < $0.length){
        num = $0.length;
        char = $1;        
    }
});
console.log(`字符最多的是${char},出现了${num}次`);

实现千位分隔符:

function parseToMoney(num) {
  num = parseFloat(num.toFixed(3));
  let [integer, decimal] = String.prototype.split.call(num, '.');
  integer = integer.replace(/\d(?=(\d{3})+$)/g, '$&,');
  return integer + '.' + (decimal ? decimal : '');
}

// 保留三位小数
parseToMoney(1234.56); // return '1,234.56'
parseToMoney(123456789); // return '123,456,789'
parseToMoney(1087654.321); // return '1,087,654.321'

判断是否是电话号码:

function isPhone(tel) {
    var regx = /^1[34578]\d{9}$/;
    return regx.test(tel);
}

验证是否是邮箱:

function isEmail(email) {
    var regx = /^([a-zA-Z0-9_\-])+@([a-zA-Z0-9_\-])+(\.[a-zA-Z0-9_\-])+$/;
    return regx.test(email);
}

验证是否是身份证:

function isCardNo(number) {
    var regx = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    return regx.test(number);
}

实现数组扁平化:

//第一种处理
let ary = [1, [2, [3, [4, 5]]], 6];
let str = JSON.stringify(ary);
console.log(str.replace(/(\[|\])/g, '').split(','))
/****************************************************************/
//第二种处理:用 reduce 实现数组的 flat 方法
function flatten(ary) {
    return ary.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
    }, []);
}
let ary = [1, 2, [3, 4], [5, [6, 7]]]
console.log(flatten(ary))

实现对象扁平化:

function objectFlat(obj = {}) {
  const res = {}
  function flat(item, preKey = '') {
    Object.entries(item).forEach(([key, val]) => {
      const newKey = preKey ? `${preKey}.${key}` : key
      if (val && typeof val === 'object') {
        flat(val, newKey)
      } else {
        res[newKey] = val
      }
    })
  }
  flat(obj)
  return res
}

// 测试
const source = { a: { b: { c: 1, d: 2 }, e: 3 }, f: { g: 2 } }
console.log(objectFlat(source));

数组降维:

[1, [2], 3].flatMap(v => v)
// -> [1, 2, 3]
/**********************************************************/
const flattenDeep = (arr) => Array.isArray(arr)
  ? arr.reduce( (a, b) => [...a, ...flattenDeep(b)] , [])
  : [arr]

flattenDeep([1, [[2], [3, [4]], 5]])

相关文章

  • 我如何确认我已醒来?

    你用来确认某种事物的工具和方法,本身也需要用另外的工具和方法确认,这另外的工具和方法又需要另另外的工具和方法确认,...

  • POI导入Excel

    需要的pom依赖 controller层方法 Util工具类中方法(ImportUtils工具类) Util工具类...

  • 工具方法

    先说明一些用到的小知识,变化过程以代码说明。 左位移<<,右位移>>。 &0XFF操作。 很明显,-10二进制补码...

  • 工具方法

    对象数组如何去重: reduce 实现对象数组去重复: 实现一个函数判断数据类型: 查找字符串中出现最多的字符和个...

  • java常用工具类---持续更新

    时间工具方法 注解操作方法 反射 文件 工具包--commons-beanutils

  • 第十六个维度:有流程运营

    有一个模型:工具+方法=结论 做社群要围绕方法建社群,才可以为用户带来价值,毕竟工具到处都有,通过方法卖工具才是王...

  • Matlab emd工具箱、tftb时频分析工具箱下载以及安装方

    Matlab工具箱通用安装方法 一、EMD工具箱安装方法 1.下载emd工具箱:地址//download.csdn...

  • Android背景高斯模糊工具类

    kotlin高斯模糊工具类:使用方法: 工具类:

  • 12-27读书清单【穷查理宝典03】

    1.工具 人们的观念和方法就像是工具,如果有了更好的工具(观念和方法),就应该取代那些没用的旧工具。每一种工具都有...

  • mac 上彻底删除Adobe Creative

    两种方法 方法一:去adobe官网下载卸载工具,通过卸载工具彻底删除 方法二:手动删除adobe creative...

网友评论

      本文标题:工具方法

      本文链接:https://www.haomeiwen.com/subject/jyfchltx.html