浏览器花式打印console.log

console是一个用于调试和记录信息的内置对象, 提供了多种方法,可以帮助开发者输出各种信息,进行调试和分析。

美化后的效果:

美化日志工具类

const isArray = function (obj) {
  return Object.prototype.toString.call(obj) === '[object Array]';
}

const Logger = function () {
};

Logger.typeColor = function (type) {
  let color = '';
  switch (type) {
    case 'primary':
      color = '#2d8cf0';
      break;
    case 'success':
      color = '#19be6b';
      break;
    case 'info':
      color = '#909399';
      break;
    case 'warn':
      color = '#ff9900';
      break;
    case 'error':
      color = '#f03f14';
      break;
    default:
      color = '#35495E';
      break;
  }
  return color;
}

Logger.print = function (type = 'default', text) {
  if (typeof text === 'object') {
    // 如果是对象则调用打印对象方式
    isArray(text) ? console.table(text) : console.dir(text);
    return;
  }
  console.log(
    `%c ${text} `,
    `border: 1px solid ${Logger.typeColor(type)};
        padding: 2px; border-radius: 4px;
        color: ${Logger.typeColor(type)};`
  );
}

Logger.pretty = function (type = 'primary', title, text) {
  if (typeof text === 'object') {
    console.group('Console Group', title);
    console.log(
      `%c ${title}`,
      `background:${Logger.typeColor(type)};border:1px solid ${Logger.typeColor(type)};
        padding: 1px; border-radius: 4px; color: #fff;`
    );
    isArray(text) ? console.table(text) : console.dir(text);
    console.groupEnd();
    return;
  }
  console.log(
    `%c ${title} %c ${text} %c`,
    `background:${Logger.typeColor(type)};border:1px solid ${Logger.typeColor(type)};
      padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`,
    `border:1px solid ${Logger.typeColor(type)};
      padding: 1px; border-radius: 0 4px 4px 0; color: ${Logger.typeColor(type)};`,
    'background:transparent'
  );
}

Logger.prettyPrimary = function (title, ...text) {
  text.forEach((t) => this.pretty('primary', title, t));
}

Logger.prettySuccess = function (title, ...text) {
  text.forEach((t) => this.pretty('success', title, t));
}

Logger.prettyWarn = function (title, ...text) {
  text.forEach((t) => this.pretty('warn', title, t));
}

Logger.prettyError = function (title, ...text) {
  text.forEach((t) => this.pretty('error', title, t));
}

Logger.prettyInfo = function (title, ...text) {
  text.forEach((t) => this.pretty('info', title, t));
}

/**
 * 打印图片
 * @param url 图片地址
 * @param scale 图片缩放比例
 */
Logger.printPic = function (url, scale = 1) {
  const img = new Image();
  img.crossOrigin = 'anonymous';
  img.onload = () => {
    const c = document.createElement('canvas');
    const ctx = c.getContext('2d');
    if (ctx) {
      c.width = img.width;
      c.height = img.height;
      ctx.fillStyle = 'red';
      ctx.fillRect(0, 0, c.width, c.height);
      ctx.drawImage(img, 0, 0);
      const dataUri = c.toDataURL('image/png');
      console.log(
        `%c sup?`,
        `font-size: 1px;
                padding: ${Math.floor((img.height * scale) / 2)}px ${Math.floor((img.width * scale) / 2)}px;
                background-image: url(${dataUri});
                background-repeat: no-repeat;
                background-size: ${img.width * scale}px ${img.height * scale}px;
                color: transparent;
                `
      );
    }
  };
  img.src = url;
}

export default Logger;

Vue2中的使用

main.js

// 引入prettyLog.js
import Logger from "./utils/prettyLog";
// 将 Logger 挂载到 Vue 原型上
Vue.prototype.$logger = Logger;

index.vue

<template>
  <div>
    <div align="center">
      <div class="typing">
        欢迎使用木芒果有限公司后台管理系统
      </div>
    </div>
  </div>
</template>

<script>

export default {
  name: "Index",
  data() {
    return {
      
    }
  },
  created() {
    //打印标准日志
    this.$logger.prettyPrimary("欢迎使用!", "木芒果有限公司后台管理系统")
    //打印信息日志
    this.$logger.prettyInfo("欢迎使用!", "木芒果有限公司后台管理系统")
    //打印成功日志
    this.$logger.prettySuccess("欢迎使用!", "木芒果有限公司后台管理系统")
    //打印错误日志
    this.$logger.prettyError("欢迎使用!", "木芒果有限公司后台管理系统")
    //打印警告日志
    this.$logger.prettyWarn("欢迎使用!", "木芒果有限公司后台管理系统")
    //打印带图片的日志
    this.$logger.printPic("https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0514%2Fd0ea93ebj00sdgx56001xd200u000gtg00hz00a2.jpg&thumbnail=660x2147483647&quality=80&type=jpg")
  }
}
</script>

<style scoped>
</style>

Vue3中的使用

main.js

// 导入 Logger
import Logger from "@/utils/perttyLog.js";
// 将 Logger 绑定到 window 对象上
window.logger = Logger;

index.vue

<template>
  <div>
    <div align="center">
      <div class="typing">
        欢迎使用木芒果有限公司后台管理系统
      </div>
    </div>
  </div>
</template>

<script setup>
  //打印标准日志
  window.logger.prettyPrimary("欢迎使用!", "木芒果有限公司后台管理系统")
  //打印信息日志
  window.logger.prettyInfo("欢迎使用!", "木芒果有限公司后台管理系统")
  //打印成功日志
  window.logger.prettySuccess("欢迎使用!", "木芒果有限公司后台管理系统")
  //打印错误日志
  window.logger.prettyError("欢迎使用!", "木芒果有限公司后台管理系统")
  //打印警告日志
  window.logger.prettyWarn("欢迎使用!", "木芒果有限公司后台管理系统")
  //打印带图片的日志
  window.logger.printPic("https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0514%2Fd0ea93ebj00sdgx56001xd200u000gtg00hz00a2.jpg&thumbnail=660x2147483647&quality=80&type=jpg")
</script>

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
`flatMap()` 是一个非常强大的函数,它的作用是将一个流中的每个元素转换为另一个流,并将这些流的元素合并成一个单一的流。使用 `flatMap()` 可以处理各种类型的数据,例如列表、集合、数组等。下面是一些 `flatMap()` 的常见用法: 1. 将一个流中的元素转换为另一个流 ```java List<String> words = Arrays.asList("hello", "world"); List<String[]> result = words.stream() .map(w -> w.split("")) .collect(Collectors.toList()); List<String> letters = words.stream() .flatMap(w -> Arrays.stream(w.split(""))) .collect(Collectors.toList()); ``` 上面的代码中,我们将一个字符串列表中的每个字符串转换为一个字符数组,然后使用 `flatMap()` 将这些字符数组合并成一个单一的流,最后将这个流转换为一个字符串列表。这个例子展示了如何将一个列表中的元素转换为另一个流,并将这些流合并成一个单一的流。 2. 将一个流中的元素转换为多个流 ```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> result = numbers.stream() .flatMap(n -> n % 2 == 0 ? Stream.of(n) : Stream.empty()) .collect(Collectors.toList()); ``` 上面的代码中,我们将一个整数列表中的偶数元素转换为一个流,并将奇数元素转换为空流。然后使用 `flatMap()` 将这些流合并成一个单一的流,最后将这个流转换为一个整数列表。这个例子展示了如何将一个流中的元素转换为多个流,并将这些流合并成一个单一的流。 3. 将一个流中的元素转换为一个流,并对流中的元素进行处理 ```java List<String> words = Arrays.asList("hello", "world"); List<String> result = words.stream() .flatMap(w -> { List<String> letters = new ArrayList<>(); for (char c : w.toCharArray()) { letters.add(String.valueOf(c)); } return letters.stream(); }) .collect(Collectors.toList()); ``` 上面的代码中,我们将一个字符串列表中的每个字符串转换为一个字符列表,并将这些字符列表合并成一个单一的流。然后我们对这个流中的每个元素进行处理,将它们转换为字符串,并将它们添加到一个新的字符串列表中。最后,我们将这个新的字符串列表收集到一个流中。这个例子展示了如何将一个流中的元素转换为一个流,并对流中的元素进行处理。 4. 将一个流中的元素转换为一个流,并对流中的元素进行分组 ```java List<String> words = Arrays.asList("hello", "world"); Map<Character, List<String>> result = words.stream() .flatMap(w -> Arrays.stream(w.split(""))) .collect(Collectors.groupingBy(Function.identity())); ``` 上面的代码中,我们将一个字符串列表中的每个字符串转换为一个字符列表,并将这些字符列表合并成一个单一的流。然后我们使用 `groupingBy()` 方法对这个流中的元素进行分组,将它们按照首字母分组,并将每个分组中的字符串收集到一个列表中。最后,我们将这个分组结果收集到一个 `Map` 中。这个例子展示了如何将一个流中的元素转换为一个流,并对流中的元素进行分组。 5. 将一个流中的元素转换为一个流,并对流中的元素进行排序 ```java List<String> words = Arrays.asList("hello", "world"); List<String> result = words.stream() .flatMap(w -> Arrays.stream(w.split(""))) .sorted() .collect(Collectors.toList()); ``` 上面的代码中,我们将一个字符串列表中的每个字符串转换为一个字符列表,并将这些字符列表合并成一个单一的流。然后我们使用 `sorted()` 方法对这个流中的元素进行排序,将它们按照字母顺序排序。最后,我们将这个排序后的流收集到一个字符串列表中。这个例子展示了如何将一个流中的元素转换为一个流,并对流中的元素进行排序。 6. 将一个流中的元素转换为一个流,并对流中的元素进行去重 ```java List<String> words = Arrays.asList("hello", "world"); List<String> result = words.stream() .flatMap(w -> Arrays.stream(w.split(""))) .distinct() .collect(Collectors.toList()); ``` 上面的代码中,我们将一个字符串列表中的每个字符串转换为一个字符列表,并将这些字符列表合并成一个单一的流。然后我们使用 `distinct()` 方法对这个流中的元素进行去重,将它们去重后的流。最后,我们将这个去重后的流收集到一个字符串列表中。这个例子展示了如何将一个流中的元素转换为一个流,并对流中的元素进行去重。 7. 将一个流中的元素转换为一个流,并对流中的元素进行过滤 ```java List<String> words = Arrays.asList("hello", "world"); List<String> result = words.stream() .flatMap(w -> Arrays.stream(w.split(""))) .filter(c -> c.equals("l")) .collect(Collectors.toList()); ``` 上面的代码中,我们将一个字符串列表中的每个字符串转换为一个字符列表,并将这些字符列表合并成一个单一的流。然后我们使用 `filter()` 方法对这个流中的元素进行过滤,将它们过滤出与 "l" 相等的字符。最后,我们将这个过滤后的流收集到一个字符串列表中。这个例子展示了如何将一个流中的元素转换为一个流,并对流中的元素进行过滤。 这些是 `flatMap()` 的一些常见用法,它们展示了如何将一个流中的元素转换为另一个流,并对流中的元素进行各种类型的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木芒果呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值