展示自己的小技能

558 阅读2分钟

技能一 写函数判断变量的数据类型

function checkDataType(variable) {
    return typeof variable;
}

// 示例用法
var myVariable = "Hello";
console.log(checkDataType(myVariable)); // 输出:string

技能二 用reduce统计字符出现频率

function countCharacterFrequency(text) {
  return Array.from(text).reduce(function(acc, char) {
    acc[char] = (acc[char] || 0) + 1;
    return acc;
  }, {});
}

// 示例用法
var text = "Hello, World!";
var frequency = countCharacterFrequency(text);
console.log(frequency);

下载.png 在上述代码中,countCharacterFrequency()函数接受一个字符串参数text。通过使用Array.from()方法,将字符串转换为字符数组。然后,使用reduce()方法对字符数组进行处理。

reduce()的回调函数中,累加器acc是一个对象,用于存储字符出现的频率。如果字符char已经存在于累加器中,则将该字符的频率加1;否则,在累加器中创建新的键,并将其频率初始化为1。

最后,返回最终的频率对象。

示例用法中,将字符串"Hello, World!"传递给countCharacterFrequency()函数,并将返回的频率对象打印输出。

技能三 前端用递归解决实际问题(深拷贝,tree搜索,汉罗塔)

  1. 深拷贝(Deep Copy): 深拷贝在前端通常用于复制对象或数组,包括嵌套的属性或元素。以下是一个JavaScript示例:
function deepCopy(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }

  let copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key]);
    }
  }
  return copy;
}

// 示例用法
let originalObject = { a: 1, b: { c: 2 } };
let copiedObject = deepCopy(originalObject);
console.log(copiedObject);

  1. 树搜索(Tree Traversal): 树搜索可以用于前端应用中的树状结构,例如菜单导航或组件层级。以下是一个使用递归进行深度优先搜索(DFS)的示例:
function dfsTraversal(node) {
  console.log(node.value);
  if (node.children) {
    node.children.forEach(child => {
      dfsTraversal(child);
    });
  }
}

// 示例用法
let rootNode = {
  value: 'A',
  children: [
    {
      value: 'B',
      children: [
        { value: 'C' },
        { value: 'D' }
      ]
    },
    {
      value: 'E'
    }
  ]
};

dfsTraversal(rootNode);

  1. 汉诺塔(Tower of Hanoi): 汉诺塔问题可以在前端应用中用于实现动画或交互效果。以下是一个使用递归解决汉诺塔问题的示例:
function hanoiTower(n, source, auxiliary, destination) {
  if (n > 0) {
    hanoiTower(n - 1, source, destination, auxiliary);
    console.log(`Move disk ${n} from ${source} to ${destination}`);
    hanoiTower(n - 1, auxiliary, source, destination);
  }
}

// 示例用法
hanoiTower(3, 'A', 'B', 'C');

下载.png 在上述代码中,hanoiTower函数接受四个参数:n表示盘子的数量,source表示起始柱子,auxiliary表示辅助柱子,destination表示目标柱子。通过递归地将上方的盘子移动到辅助柱子,然后将底部的盘子移动到目标柱子,并再次递归将辅助柱子上的盘子移动到目标柱子,完成整个移动过程。

技能四 借用原型链补充数组的高阶排序方法

在前端开发中,可以通过借用原型链来扩展数组的功能,包括高阶排序方法。下面是一些常见的数组排序方法的示例代码:

  1. 自定义排序方法:
// 借用原型链扩展数组的排序方法
Array.prototype.customSort = function(compareFunction) {
  return this.sort(compareFunction);
};

// 示例用法
let numbers = [5, 2, 8, 1, 9];
numbers.customSort((a, b) => a - b);
console.log(numbers);

下载.png 在上述代码中,通过扩展Array.prototype来添加一个customSort方法,该方法接受一个比较函数作为参数,并使用sort方法进行排序。

  1. 按属性排序:
// 借用原型链扩展数组的排序方法
Array.prototype.sortByProperty = function(property) {
  return this.sort((a, b) => a[property] - b[property]);
};

// 示例用法
let users = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 20 }
];
users.sortByProperty('age');
console.log(users);

下载.png 在上述代码中,通过扩展Array.prototype来添加一个sortByProperty方法,该方法接受一个属性名作为参数,并根据该属性进行排序。

技能五 写代码实现货币格式化

在前端开发中,可以使用内置的JavaScript函数和一些常用的技巧来实现货币格式化。以下是几种常见的货币格式化方法的示例代码:

  1. 使用toLocaleString()方法:
let amount = 1234567.89;
let formattedAmount = amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' });
console.log(formattedAmount);

下载.png 在上述代码中,使用toLocaleString()方法将数字格式化为货币字符串。可以通过传递style: 'currency'currency: 'USD'选项来指定货币格式和货币类型。

  1. 自定义格式化函数:
function formatCurrency(amount, currencySymbol = '$') {
  return `${currencySymbol}${amount.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`;
}

let amount = 1234567.89;
let formattedAmount = formatCurrency(amount);
console.log(formattedAmount);

下载.png 在上述代码中,定义了一个自定义的formatCurrency()函数,该函数接受金额和可选的货币符号作为参数。使用toFixed(2)将数字保留两位小数,并使用正则表达式来在千位添加逗号分隔符。

  1. 使用第三方库,如Numeral.js:
let numeral = require('numeral');
let amount = 1234567.89;
let formattedAmount = numeral(amount).format('$0,0.00');
console.log(formattedAmount);

下载.png 在上述代码中,使用第三方库Numeral.js来进行货币格式化。可以使用.format()方法来指定格式化的模式。