js基础算法题

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
		//基础算法题:
		//字符串反转。
		function strReverse(str){
			str = str.split('').reverse().join('');
			return str;
		}
		var str = 'abc';
		console.log(strReverse(str));//cba
		//计算一个整数的阶乘
		function factorialize1(num){
			if(num<=0){
				return 1;
			}else{
				return num*arguments.callee(num-1);//可以解除与函数名之间的耦合
			}
		}
		//但是上述方法在严格模式下是不被允许的
		var factorialize2 = (function f(num){
			if(num<=0){
				return 1;
			}else{
				return num*f(num-1);//f函数永远存在
			}
		});
		var num = 5;
		console.log(factorialize2(num));
		//判断一个字符串是不是回文的。
		function palindrome(str){
			str = str.replace(/\s*/g,'');
			var temp = str.split('').reverse().join('');
			return str === temp;
		}
		console.log(palindrome('ab cba'));//true
		console.log(palindrome('abc'));//false
		//找到输入句子中长度最长的单词,并返回该单词的长度
		function findLong1(str){
			var arr = str.split(' ');//将所有单词转化为数组。
			var maxLen = 0;
			var num = arr.map(function(val){
				return val.length;
			});
			num.forEach(function(val){
				if(maxLen<val){
					maxLen = val;
				}
			});
			return maxLen;
		}
		//更简便的方法
		function findLong2(str){
			var arr = str.split(' ');
			var brr = arr.sort(function(a,b){
				return b.length - a.length;
			});//从大到小排列
			return brr[0].length;
		}
		console.log(findLong1('hello everybody'));
		console.log(findLong2('hello everybody'));
		//确保传入的字符串的每个单词的首字母大写,其余小写
		function firstUp(str){
			var arr = str.split(' ');
			var brr = arr.map(function(val){
				return val.charAt(0).toUpperCase() + val.substring(1);
			});
			return brr.join(' ');
		}
		console.log(firstUp('i am a good person!'));
		//一个大数组有四个小数组,分别找到这四个小数组中的最大值,组成一个新数组返回。
		function findArr(arr){
			var res = [];
			arr.forEach(function(val){
				val.sort(function(a,b){
					return b-a;
				});//每个小数组进行从大到小的排序
				res.push(val[0]);
			});
			return res;
		}
		console.log(findArr([[1,2,3],[2,3,4],[3,4,5],[4,5,6]]));
		//检查一个字符串是否以指定的字符结尾
		function findChar(str,item){
			return str[str.length-1] === item;
		}
		console.log(findChar('hello','o'));
		//重复一个字符串指定的次数,如果次数为负,则返回空字符串
		function rep(str,num){
			if(num<0){
				return '';
			}else{
				return str.repeat(num);
			}
		}
		console.log(rep('ha',3));
		console.log(rep('ha',-1));
		// 9.截断一个字符串

		// 如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。

		// 切记,插入到字符串尾部的三个点号也会计入字符串的长度。

		// 但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度(不算入num的长度中)。
		function judge(str,num){
			var len = str.length;
			if(len>num){
				if(num<=3){
					return str.slice(0,num) + '...';
				}else{
					return str.slice(0,num-3) + '...';
				}
			}else{
				return str;
			}
		}
		console.log(judge("A-tisket a-tasket A greenand yellow basket", 11));
		// 把一个数组arr按照指定的数组大小size分割成若干个数组块
		function chunk1(arr,num){
			var len = arr.length;
			var res = [];
			if(num<len){
				var i = 0;
				while(i<len){
					var j=0;
					var temp = [];
					while(arr[i]&&j<num){
						temp.push(arr[i]);
						j++;
						i++;
					}
					res.push(temp);
				}
				return res;
			}else{
				return arr;
			}
		}
		function chunk2(arr, size) {

			 var newarr=[];

			 for(var i=0;i<arr.length;i+=size) {

			   var brr=arr.slice(i,i+size);

			   newarr.push(brr);

			 }

			 return newarr;

		}
		console.log(chunk2([1,2,3,4,5],2));
		//11.返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始
		function rest(arr,n){
			if(n<=0){
				return arr;
			}else{
				return arr.slice(n);
			}
		}
		console.log(rest([1,2,3],2));
		//如果数组第一个字符串元素包含了第二个字符串元素的所有字符(忽略大小写),函数返回true
		function strInclude(str1,str2){
			var len2 = str2.length;
			str1 = str1.toLowerCase();
			str2 = str2.toLowerCase();
			for(var i=0;i<len2;i++){
				if(str1.indexOf(str2[i],i)<0){//注意:这里一定要加上索引值来检测,否则会有bug,比如,会认为Hello和helllo也返回true
					return false;
				}
			}
			return true;
		}
		console.log(strInclude('Hello','helo'));
		// 13.删除数组中的所有假值。

		// 在JavaScript中,假值有false、null、0、""、undefined和 NaN。
		function delete1(arr){
			return arr.filter(function(val){
				return Boolean(val);
			});
		}
		console.log(delete1(['',null,1,2,undefined,NaN]));
	</script>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值