//1 反转字符串 在此示例中,我们使用了散布运算符(…),Array的reverse方法和String的join方法来反转给定的字符串。
const reverseString = string => [...string].reverse().join('');
console.log('反转字符串:' + reverseString('abcde'))
//2 计算数字的阶乘 要计算给定数字的阶乘,我们使用箭头函数和嵌套三元运算符。
const factorialOfNumber = number => number < 0 ? (()=>{ throw new TypeError('负数没有阶乘')})() : number <= 1 ? 1 : number*factorialOfNumber(number-1);
console.log('计算数字的阶乘一:' + factorialOfNumber(5))
//2 计算数字的阶乘2 迭代函数
function factorialOfNumber2 (number) {
if(number<=1){
return 1
}else{
return number*factorialOfNumber2(number-1)
}
}
console.log('计算数字的阶乘二:' + factorialOfNumber2(5))
//2 计算数字的阶乘3 使用arguments中的callee函数;对象arguments主要是保存函数参数,使用arguments.length就是函数参数的长度。这个对象还有一个属性callee,该属性指向的是一个指针,用于指向拥有该arguments对象的函数,他的很重要的作用就是降低函数与函数名的耦合程度。 arguments对象不是一个Array,他类似一个对象,但除了length属性和索引之外,没有任何array属性
// var args = Array.from(arguments);//转换成真真实数组 浅拷贝,将伪数组转换成真实数组
// var args = [...arguments] // 转换成真实数组
function factorialOfNumber3(number){
if(number<=1){
return 1
}else{
return number*arguments.callee(number-1)
}
}
console.log('计算数字的阶乘三:' + factorialOfNumber2(5))
//3 检查数字是否为2的幂 & 位与运算
// 通过二进制的方法可以判断一个数num是不是2的n次方幂,规律可知,只要是2的次方幂,必然是最高位为1,其余为0,当num-1时,则最高位是0,其余是1.
// 按位与运算: 1&1=1 0&1=0 0&0=0 1&0=0
// 2 ---> 10 3 ---> 11
// 4 ---> 100 6 ---> 110
// 8 ---> 1000 7 ---> 111
// 例子:
// 8 的二进制 1000 8-1 的二进制 0111 按位与运算 1000&0111 --> 0000 所以8是2的n次方幂。
// 9 的二进制 1001 9-1 的二进制 1000 按位与运算 1001&1000 ---> 1000 所以9不是2的次方幂。
// 24 的二进制 11000 24-1 的二进制 10111 按位与运算 11000&10111 ---> 10000 所以24不是2的次方幂。
// 可以通过num.toString(2)来写出num的二进制。
// function check(num){
// return (num > 0) && ((num & (num - 1)) == 0);
// }
const isNumberPowerOfTwo = number => !!number && (number & (number - 1)) == 0
console.log('是否为2的幂:'+isNumberPowerOfTwo(8))
//4 将数字转换为数字数组
const convertToArray = number => [...`${number}`].map(el => parseInt(el))//只能是数字
console.log('将数字转换为数字数组:'+convertToArray(894567))
const convertToArray2 = number => number.splice(',')//可以是数字字符串
console.log('将数字转换为数字数组2:'+convertToArray(894567))
//5、从对象创建键-值对数组 在此示例中,我们使用Object中的keys方法和 Array中的map方法来映射Object的键,并创建一个键值对数组。
//Object.keys()
// 传入字符串,返回索引
// var arr = ['a', 'b', 'c'];
// console.log(Object.keys(arr)); // console: ['0', '1', '2']
// 传入对象,返回属性名
// var obj = { a: 'alive', b: 'bike', c: 'color' };
// console.log(Object.keys(obj)); // console: ['a', 'b', 'c']
const keyValuePairsToArray = obj => Object.keys(obj).map(el => [el,obj[el]])
console.log('从对象创建键-值对数组:'+keyValuePairsToArray({x:1,y:2}))//0: (2) ["x", 1] 1: (2) ["y", 2]
//6、从数组中返回[Number]个最大元素
//(x,y)=>y-x //该函数是一个排序函数,为了按照数值的大小对数字排序。
const maxElementsFromArray = (array,number=1)=>[...array].sort((x,y)=>y-x).splice(0,number)
console.log('从数组中返回[Number]个最大元素:'+maxElementsFromArray([10,2,1]))
//7、检查数组中的所有元素是否相等 every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
const elementAreEqual = array => array.every(el => el === array[0])
console.log('检查数组中的所有元素是否相等:'+elementAreEqual([2,2,2]))
//8、返回两个数的平均值 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
const averageTwoNumbers = (...numbers) => numbers.reduce((accumulator,currentValue) => accumulator+currentValue,0) / numbers.length
console.log('返回两个数的平均值:'+averageTwoNumbers(1,2))