各种算法(三)

有一个字符串有很多is,写一个方法只保留一个is?

1
2
3
4
5
6
7
8
9
function deleteIs(str){
var index = str.search("is");
var left = str.slice(0,index+2);
var right = str.slice(index+2,str.length);
right = right.split("is").join("");
return left.concat(right);
}

console.log(deleteIs("thisismybook"));//thismybook

有3个-10-10之间的整数,写一个方法这三个数一共有多少可能相加等于10。

改写数组的push方法,保持原有逻辑,添加一个console.log(arguments),即push什么打印什么。

1
2
3
4
5
Array.prototype.push = function(val){
console.log(val);
}
var temp = [1,2,5];
temp.push(7);//打印7

传入一个无序数组,要求n数相加,获取特定的sum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 function getResult(arr,n,sum){
if(n==0&&sum==0){
return true;
}
if(n<0){
return false;
}
if(n>0){
for(var i in arr){
var temp = arr.slice(i+1,arr.length);
return getResult(temp,n-1,sum-arr[i]) || getResult(temp,n,sum);
}
}
}

console.log(getResult([1,2,3,4],2,7)); //true

用正则表达式去掉两边的空格

1
2
3
4
5
6
function remove(str){
var reg = /(^\s+)|(\s+?)/g;
return str.replace(reg,"");
}

console.log(remove("this is book"));//"thisisbook"

给定一个非空的数字数组,数组有且只有一个非重复项,实现一个方法获取落单项

1
2
3
4
5
6
7
8
9
10
11
12
13
function getSingleNumber(arr){
var temp = [];
for(var i in arr){
if(temp.indexOf(arr[i]) == -1){
temp.push(arr[i]);
}else{
temp.splice(temp.indexOf(arr[i]),1);
}
}
return temp[0];
}

console.log(getSingleNumber([0,1,0,0])); //1

请实现一个函数merge,传入一个数组,合并数组中【相邻且重复】的元素

1
2
3
4
5
6
7
8
9
10
11
12
function merge(arr){
var reg = /(.)\1*/g;
var str = arr.join("");
str = str.replace(reg,"$1");
arr = str.split("");
arr = arr.map(function(val){
return parseInt(val);
})
return arr;
}

console.log(merge([3,2,2,4,5,5,6,2,1]));//[3,2,4,5,6,2,1]
-------------本文结束 感谢您的阅读-------------