es6 数组字符串经典操作

153 阅读4分钟
		//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))