<!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>