Skip to content

算法与工具函数 (Algorithm & Utils)

以下是常见的 JavaScript 算法实现与工具函数。

1. 数组去重

javascript
// Set 方式
function unique(arr) {
  return [...new Set(arr)];
}

let arr = [1, 2, 2, 4, 5, 4];
console.log(unique(arr)); // [1, 2, 4, 5]

2. 数组扁平化 (Flatten)

javascript
// 递归实现
export function flattenRecursive(arr) {
  return arr.reduce((acc, cur) => {
    return Array.isArray(cur) ? acc.concat(flattenRecursive(cur)) : acc.concat(cur);
  }, []);
}

// 迭代实现 (while + some)
function flattenIterative(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}

3. 回文字符串判断

javascript
export function isPalindrome(str) {
  // 移除非字母数字字符并转为小写
  const cleanStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
  return cleanStr === cleanStr.split('').reverse().join('');
}

4. 获取范围内的随机数

javascript
function getRandomInRange(min, max) {
  if (min > max) [min, max] = [max, min];
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

5. 两数之和 (Two Sum)

javascript
function twoSum(arr, target) {
  const map = new Map();
  for (let i = 0; i < arr.length; i++) {
    const complement = target - arr[i];
    if (map.has(complement)) {
      return [map.get(complement), i];
    }
    map.set(arr[i], i);
  }
  return [];
}

6. 打印质数

javascript
function printPrimes(num) {
  for (let i = 2; i < num; i++) {
    let isPrime = true;
    for (let j = 2; j <= Math.sqrt(i); j++) {
      if (i % j === 0) {
        isPrime = false;
        break;
      }
    }
    if (isPrime) console.log(i);
  }
}

7. 手写 Filter

javascript
function filter(fn, arr) {
  let newList = [];
  for (let [idx, v] of arr.entries()) {
    if (fn(v, idx, arr)) {
      newList.push(v);
    }
  }
  return newList;
}

8. 手写 Unshift

javascript
Array.prototype.myUnshift = function (...args) {
  for (let i = args.length - 1; i >= 0; i--) {
    this.splice(0, 0, args[i]);
  }
  return this.length;
};

MIT Licensed | Keep Learning.