1.计算阶乘和
const factorial = n => n === 0 ? 1 : n * factorial(n - 1);
console.log(factorial(4));
2.数组去重
const uniqueArray = array => [...new Set(array)];
console.log(uniqueArray([1,1,,2,2,,3,4,5,5]));//[1,undefined,2,3,4,5]
3.数组合并
const mergedArray = (target,arrays) => target.concat(...arrays);
console.log(mergedArray([1,2,3],[2,3,4]));// [1, 2, 3, 2, 3, 4]
console.log(mergedArray([1,2,3],[])); //[1, 2, 3]
4.判断数组元素唯一
const isUnique = array => array.length === new Set(array).size;
console.log(isUnique([1,2,3,1]));//false
console.log(isUnique([1,2,3]));//true
5.压缩字符串
const compressedString = str => str.replace(/(.)\1+/g, match => match[0] + match.length);
console.log(compressedString('abaaacadasd'));//aba3cadasd
6.斐波拉契前n项
const fibonacci = n => Array(n).fill().map((_, i, arr) => {arr[i] = i <= 1 ? i : arr[i - 1] + arr[i - 2]; return arr[i]});
console.log(fibonacci(10));//[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
7.求多个数组的交集
const intersection = arrays => arrays.reduce((acc, cur) => acc.filter(value => cur.includes(value)));
console.log(intersection([[1,2,3],[1,2],[2,3]]));//[2]
8.验证邮箱格式
const isValidEmail = email =>/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/.test(email);
console.log(isValidEmail('1020572432@qq.com'));//true
console.log(isValidEmail('102057242@q'));//false
9.数组去除假值
const truthyArray = array => array.filter(Boolean);
console.log(truthyArray([false,null,0,"",,1]));//[1]
//假值,如false,null,0,""和undefined
10.字符串转数字
const intValue = str=> +str;
console.log(intValue('3'));//3
console.log(intValue('false'));//NaN
11.统计数组元素出现的频次
const countOccurrences = array => array.reduce((acc, cur) => (acc[cur] ? acc[cur]++ : acc[cur] = 1, acc), {});
console.log(countOccurrences([1,2,3,4,5,6]));//{1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1}
12.日期格式化
const formattedDate = new Date().toISOString().slice(0, 10);
console.log(formattedDate);//2024-06-04