最近回顾了一些js相关的趣味算法,又有一些新收获。感觉个人搭建的博客对有代码的文章的格式支持不是很给力
1.回文
忽略标点、空格以及大小写,正序和反序字符串相同
function palindrome(str) {
var str1 = str.replace(/\W+/g, '');
str1 = str1.replace(/\_+/g, '');
str1 = str1.toLowerCase();
var arr1 = str1.split('');
var arr2 = arr1.reverse();
var str2 = arr2.join('');
if(str1 == str2){
return true;
}else{
return false;
}
}
2.最长单词
查找最长单词及其长度
function findLongestWord(str) {
var length = 0;
var reg = /[a-z0-9]+/gi;
var str1 = str.match(reg);
for(var i = 0; i < str1.length; i++){
if(str1[i].length > length){
length = str1[i].length;
}
}
return length;
}
3.首字大写
确保字串每个单词首字大写
function titleCase(str) {
var str1 = str.toLowerCase();
var reg = /[a-z']+/g;
var arr = str1.match(reg);
var ha = [[]];
for(var i = 0; i < arr.length; i++){
ha[i] = arr[i][0].toUpperCase();
for(var j = 1; j < arr[i].length; j++){
ha[i] += (arr[i][j]);
}
}
return ha.join(' ');
}
4.指定结尾
确保字串以指定字串结尾
function titleCase(str) {
var str1 = str.toLowerCase();
var reg = /[a-z']+/g;
var arr = str1.match(reg);
var ha = [[]];
for(var i = 0; i < arr.length; i++){
ha[i] = arr[i][0].toUpperCase();
for(var j = 1; j < arr[i].length; j++){
ha[i] += (arr[i][j]);
}
}
return ha.join(' ');
}
5.字串截取
a.如果字符串的长度比指定的参数num长,则把多余的部分用…来表示。
b.插入到字符串尾部的三个点号也计入字符串的长度。
c.如果指定的参数num小于或等于3,则添加的三个点号不计入字符串的长度。
function truncate(str, num) {
var newNum = Math.floor(num);
if(newNum < 1){
return ;
}else if(newNum <= 3){
if(str.length > newNum){
str = str.substr(0, newNum).concat('...');
}else{
str = str.substr(0, newNum);
}
}else{
if(str.length > newNum){
str = str.substr(0, newNum - 3).concat('...');
}else{
str = str.substr(0, newNum);
}
}
return str;
}
6.数组分割
把一个数组arr按照指定的数组大小size分割成若干个数组块。
例如:chunk([1,2,3,4],2)=[[1,2],[3,4]]
function chunk(arr, size) {
var newSize = Math.floor(size);
var newArr = [];
if(arr && (newSize > 0)){
for(var i = 0; i < arr.length; i += newSize){
newArr.push(arr.slice(i, i+newSize));
}
return newArr;
}
}
7.数组查询
如果数组第一个字符串包含了第二个字符串的所有字符,函数返回true。
function mutation(arr) {
if(arr instanceof Array){
for(var i = 0; i < arr[1].length; i++){
var reg = new RegExp(arr[1][i], 'gim');
if(!arr[0].match(reg)){
return false;
}
}
return true;
}
}
8.去除数组任意值
第一个参数是待去除的数组,其余的参数是待摧毁的值。
function destroyer(arr) {
if(arr instanceof Array){
var args = [];
for(var j = 1; j < arguments.length; j++){
args.push(arguments[j]);
}
return arguments[0].filter(function(value){
return args.indexOf(value) === -1;
});
}
}
9.位移密码
移位密码也就是密码中的字母会按照指定的数量来做移位。
ROT13密码:字母会移位13个位置。由’A’ ↔ ‘N’, ‘B’ ↔’O’,以此类推。
所有的字母都是大写,跳过任何非字母形式的字符(例如:空格,标点符号)。
function rot13(str) {
var newStr = str.toUpperCase();
var str1 = [];
var obj =['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
//abcdefghijklm
//nopqrstuvwxyz
var index = 0;
for(var i = 0; i < newStr.length; i++){
if(newStr[i] >= 'A' && newStr[i] <= 'Z'){
index = obj.indexOf(newStr[i]);
index = (index + 13)%26;
str1.push(obj[index]);
}else{
str1.push(newStr[i]);
}
}
return str1.join('');
}