日常开发常用工具函数总结

1. 简单数组去重

  • 第一种方式:
    使用 reduce 函数返回值是累加的结果,判断当前遍历值是否在其中。
function removeDuplicates(arr) {
   
  let result = arr.reduce(function (init, current) {
   
    if (init.indexOf(current) === -1) {
   
      init.push(current);
    }
    return init;
  }, []);
  return result;
}
let myArray = ["a", "b", "a", "b", "c", "e", "e", "c", "d", "d", "d", "d"];
console.log(removeDuplicates(myArray)); //  ["a", "b", "c", "e", "d"]
  • 第二种方式:
    先使用排序,把相同的元素放到一起,然后再使用 reduce 方法让当前遍历对象跟前一个进行比较,相同就不加入,不同则加入。
function removeDuplicates(arr) {
   
  let result = arr.sort().reduce((init, current) => {
   
    if (init.length === 0 || init[init.length - 1] !== current) {
   
      init.push(current);
    }
    return init;
  }, []);
  return result;
}
let arr = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
console.log(removeDuplicates(arr)); //[1,2,3,4,5]
  • 第三种方式:
    利用 indexOf 总是返回该项的第一个出现的索引,所以我们可以判断当前在过滤循环中的项是否是重复的。如果是,我们就不返回到由 filter()方法创建的新数组中。
function removeDuplicates(arr) {
   
  let result = arr.filter((item, index) => {
   
    return arr.indexOf(item) === index;
  });
  return result;
}
let arr = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
console.log(removeDuplicates(arr)); //[1,2,3,4,5]

2. 数组中对象去重

function removeDuplicates(arr) {
   
  const tempObj = {
   };
  let result = arr.reduce((init, current) => {
   
    tempObj[current.name]
      ? ""
      : (tempObj[current.name] = true && init.push(current));
    return init;
  }, []);
  return result;
}
// 注意: name字段必须为current中存在的字段

3. 扁平化嵌套数组

  • 方式一:
    使用 flat 方法,该方法接受一个可选参数,几维数组展开就把数字几作为参数,使用 Infinity 作为参数时可展开任意深度的嵌套数组
function flatArray(arr) {
   
  return arr.flat();
}
  • 方法二:
    使用 reduce 方法,该方法仅适用于二维数组
function flatArray(arr) {
   
  return arr.reduce((init, current) => init.concat(current), []);
}

4. 将数组转化为树形结构

  • 将如下数据转化为树状结构
let arr = [
  {
   
    id: 1,
    name: "1",
    pid: 0,
  },
  {
   
    id: 2,
    name: "1-1",
    pid: 1,
  },
  {
   
    id: 3,
    name: "1-1-1",
    pid: 2,
  },
];
  • 实现方式
function toTree(data, parentId = 0) {
   
  var itemArr = [];
  for (var i = 0; i < data.length; i++) {
   
    var node = data[i];
    if (node.pid === parentId) {
   
      var newNode = {
   
        ...node,
        name: node.name,
        id: node.id,
        children: toTree(data, node.id),
      };
      itemArr.push(newNode);
    }
  }
  return itemArr;
}

5. 格式化时间

  • 方式一:
const getDate = (timeStamp, format, type) => {
   
  const d = new Date(timeStamp || 0);
  const year = d.getFullYear();
  const month = getHandledValue(d.getMonth() + 1);
  const day = getHandledValue(d.getDate());
  const hour = getHandledValue(d.getHours());
  const minute = getHandledValue(d.getMinutes());
  const second = getHandledValue(d.getSeconds());
  let resStr = "";
  if (!type) {
   
    type = "/";
  }
  switch (format) {
   
    case "yyyymmdd":
      return [year, month, day].map(formatNumber).join(type);
    case "yyyymm":
      return [year, month].map(formatNumber).join(type);
    case "mmdd":
      return [month, day].map(formatNumber).join(type);
    case "yyyy":
      return year
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值