javascript初级脚本算法
翻转字符串算法
function reverseString(str) {
return str.split('').reverse().join('');
}
console.log(reverseString("hello")); // olleh
console.log(reverseString("Howdy")); // ydwoH
console.log(reverseString("Greetings from Earth")); // htraE morf sgniteerG
阶乘算法
function factorialize(num) {
for (var i = num - 1; i > 0; i--) num *= i;
if (num == 0) return 1;
return num;
}
console.log(factorialize(6)); // 720
console.log(factorialize(5)); // 120
console.log(factorialize(10)); // 3628800
console.log(factorialize(20)); // 2432902008176640000
console.log(factorialize(0)); // 1
回文算法
回文算法是指一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样。
function palindrome(str) {
str = str.replace(/[\s,\,\.,\-,\/,\:,\_,\(,\)]/g, "").toLowerCase();
if (str == str.split('').reverse().join('')) return true;
else return false;
}
console.log(palindrome('race car')); // true
console.log(palindrome("eye")); // true
console.log(palindrome("A man, a plan, a canal. Panama")); // true
console.log(palindrome("not a palindrome")); // false
console.log(palindrome("nope")); // false
寻找最长的单词算法
function findLongestWord(str) {
var arr = str.split(' '), // 字符串转为数组,注意此处空格
i, len;
str = arr[0];
for (i = 0, len = arr.length; i < len; i++)
if (str.length < arr[i].length) str = arr[i];
return str.length;
}
console.log(findLongestWord("The quick brown fox jumped over the lazy dog")); // 6
console.log(findLongestWord("May the force be with you")); // 5
console.log(findLongestWord("What if we try a super-long word such as otorhinolaryngology")); // 19
设置首字母大写算法
function titleCase(str) {
var arr = str.split(' '), // 字符串转为数据,注意此处空格
i, len;
for (i = 0, len = arr.length; i < len; i++)
arr[i] = arr[i].slice(0, 1).toLocaleUpperCase() + arr[i].slice(1).toLocaleLowerCase();
return arr.join(' '); // 数组转为字符串,注意此处空格
}
console.log(titleCase("I'm a little tea pot")); // I'm A Little Tea Pot
console.log(titleCase("sHoRt AnD sToUt")); // Short And Stout
console.log(titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")); // Here Is My Handle Here Is My Spout
寻找数组中的最大值算法
function largestOfFour(arr) {
var newArr = [],
num, i, lenI, j, lenJ;
for (i = 0, lenI = arr.length; i < lenI; i++) {
num = arr[i][0];
for (j = 0, lenJ = arr[i].length; j < lenJ; j++)
if (arr[i][j] > num) num = arr[i][j];
newArr.push(num);
}
return newArr;
}
console.log(largestOfFour([
[13, 27, 18, 26],
[4, 5, 1, 3],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
])); // [27, 5, 39, 1001]
console.log(largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
])); // [5, 27, 39, 1001]
console.log(largestOfFour([
[4, 9, 1, 3],
[13, 35, 18, 26],
[32, 35, 97, 39],
[1000000, 1001, 857, 1]
])); // [9, 35, 97, 1000000]
确认末尾字符算法
function confirmEnding(str, target) {
var last = str.substr((str.length - target.length), target.length);
if (last == target) return true;
else return false;
}
console.log(confirmEnding("Bastian", "n")); // true
console.log(confirmEnding("He has to give me a new name", "na")); // false
重复操作算法
function repeat(str, num) {
if (num <= 0) return '';
else return str.repeat(num);
}
console.log(repeat("abc", 3)); // abcabcabc
console.log(repeat("abc", -2)); //
字符串截取算法
function truncate(str, num) {
if (num <= 3) return str.slice(0, num) + '...';
else if (num > 3 && num < str.length) return str.slice(0, num - 3) + '...';
else return str;
}
console.log(truncate("Peter Piper picked a peck of pickled peppers", 14)); // Peter Piper...
console.log(truncate("Absolutely Longer", 2)); // Ab...
console.log(truncate("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2)); // A-tisket a-tasket A green and yellow basket
数组分割算法
/*方法一*/
function chunk(arr, size) {
var newArr = [],
i, len = arr.length / size;
for (i = 0; i < len; i++) newArr.push(arr.splice(0, size));
return newArr;
}
/*方法二*/
function chunk(arr, size) {
var newArr = [],
i, len = arr.length;
for (i = 0; i < len; i += size) newArr.push(arr.slice(i, i + size));
return newArr;
}
console.log(chunk(["a", "b", "c", "d"], 2)); // [["a", "b"],["c", "d"]]
console.log(chunk([0, 1, 2, 3, 4, 5], 3)); // [[0, 1, 2], [3, 4, 5]].
console.log(chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)); // [[0, 1, 2, 3],[4, 5, 6, 7],[8]]
数组截断算法
function slasher(arr, howMany) {
arr.splice(0, howMany)
return arr;
}
console.log(slasher([1, 2, 3], 2)); // [3]
console.log(slasher([1, 2, 3], 0)); // [1, 2, 3]
console.log(slasher([1, 2, 3], 9)); // []
console.log(slasher(["burgers", "fries", "shake"], 1)); // ["fries", "shake"]
console.log(slasher([1, 2, "chicken", 3, "potatoes", "cheese", 4], 5)); // ["cheese", 4]
数组查询算法
function mutation(arr) {
var newArr0 = arr[0].toLowerCase(),
newArr1 = arr[1].toLowerCase().split(''),
bol;
bol = newArr1.every(function(ele) {
return newArr0.indexOf(ele) > -1;
});
return bol;
}
console.log(mutation(["hello", "hey"])); // fasle
console.log(mutation(["hello", "Hello"])); // true
console.log(mutation(["zyxwvutsrqponmlkjihgfedcba", "qrstu"])); // true
console.log(mutation(["Mary", "Aarmy"])); // true
console.log(mutation(["floor", "for"])); // true
删除数组中特定值算法
删除false、null、0、""、undefined 和 NaN。
function bouncer(arr) {
var newArr = [],
i, len;
for (i = 0, len = arr.length; i < len; i++)
if (!!arr[i]) newArr.push(arr[i]);
return newArr;
}
console.log(bouncer([7, "ate", "", false, 9])); // [7, "ate", 9]
console.log(bouncer(["a", "b", "c"])); // ["a", "b", "c"]
console.log(bouncer([false, null, 0, NaN, undefined, ""])); // []
console.log(bouncer([1, null, NaN, 2, undefined])); // [1, 2]
去除数组中任意多个值算法
function destroyer(arr) {
var args = '',
newArr = [],
i, j;
for (i = 1; i < arguments.length; i++)
args += (arguments[i]);
for (j = 0; j < arr.length; j++)
if (args.indexOf(arr[j]) == -1)
newArr.push(arr[j]);
return newArr;
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); // [1, 1]
console.log(destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3)); // [1, 5, 1]
console.log(destroyer([2, 3, 2, 3], 2, 3)); // []
console.log(destroyer(["tree", "hamburger", 53], "tree", 53)); // ["hamburger"]
数组排序并插入值算法
function where(arr, num) {
arr.push(num);
arr.sort(function(a, b) {
return a - b;
});
return arr.indexOf(num);
}
console.log(where([40, 60], 50)); // 1
console.log(where([10, 20, 30, 40, 50], 30)); // 2
console.log(where([2, 5, 10], 15)); // 3
位移密码算法
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由’A’ ↔ ‘N’, ‘B’ ↔’O’,以此类推。
所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,就跳过它们。
function rot13(str) {
var newArr = [],
i, len, charCodeIndex;
for (i = 0, len = str.length; i < len; i++) {
charCodeIndex = str.charCodeAt(i);
if (charCodeIndex >= 65 && charCodeIndex < 78)
newArr.push(String.fromCharCode(charCodeIndex + 13));
else if (charCodeIndex >= 78)
newArr.push(String.fromCharCode(charCodeIndex - 13));
else
newArr.push(String.fromCharCode(charCodeIndex));
}
return newArr.join('');
}
console.log(rot13("SERR PBQR PNZC")); // "FREE CODE CAMP"
console.log(rot13("SERR CVMMN!")); // "FREE PIZZA!"
console.log(rot13("SERR YBIR?")); // "FREE LOVE?"
console.log(rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.")); // "THE QUICK BROWN DOG JUMPED OVER THE LAZY FOX."
有写的不好的地方欢迎大家留言讨论。