算法与工具函数 (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;
};