js初级算法合集
一、翻转字符串
自己写出来的丑陋代码
function reverseString(str) {
var turn = '';
for (var i = str.length-1; i > -1; i--) {
turn = turn + str[i];
}
return turn;
}
reverseString("hello");
输出为:
olleh
二、阶乘算法
function factorialize(num) {
var sum =1;
for (var i = 1; i <= num; i++) {
sum = sum * i;
}
return sum;
}
factorialize(5);
输出为:
120
三、判断文字是否为回文
function palindrome(str) {
// 删除文字中的空格,符号,留下字母
var newstr = str.replace(/[^0-9a-z]/gi, "");
// 把大写的字母转换成小写字符
newstr = newstr.toLowerCase();
// 把原有的字符串回文
for (var i = 0, j = newstr.length - 1; i < j; i++, j--) {
if (newstr.charAt(i) !== newstr.charAt(j))
{
return false; //逐个字符比较,不匹配返回false
}
}
return true;
}
palindrome("eye");
输出为:
true
四、寻找最长的单词算法
function findLongestWord(str) {
var str_list = str.split(" "); //根据空格进行单词分割,放入列表
var word_lenght = 0;
for (var i=1; i < str_list.length; i++){
if (str_list[i].length > word_lenght) {
word_lenght = str_list[i].length; //遇见长度大的赋值
}
}
return word_lenght;
}
五、设置首字母大写算法
function titleCase(str) {
var newStr = str.split(" ");
for(var i=0; i<newStr.length; i++){
newStr[i] = newStr[i].slice(0, 1).toUpperCase() + newStr[i].slice(1).toLowerCase(); //使用切片和转化大小写函数实现
}
return newStr.join(" "); //使列表用空格生成句子
}
titleCase("I'm a little tea pot");
结果为:
I'm A Little Tea Pot
六、寻找数组中的最大值
function largestOfFour(arr) {
var arr_list = [];
for (var i=0; i<arr.length; i++){
arr_list[i] = 0;
for (var u=0; u<arr[i].length; u++){
var max_num=0;
if (arr[i][u]>arr_list[i]){
arr_list[i] = arr[i][u]
}
}
}
return arr_list;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
结果为:
[5,27,39,1001]
七、确认末尾字符
function confirmEnding(str, target) {
//截取与判断字符相同的字符
var tar_length = target.length;
var str_last = str.substr(-tar_length)
//与判断字符比较
if ( target == str_last ){
return true;
}
return false;
}
// return target==str_last;
confirmEnding("Bastian", "n");
八、重复操作算法
function repeat(str, num) {
if(num > 0)
{
var newStr = "";
for(var i = 0; i < num; i++){
newStr = newStr + str;
}
return newStr;
}
else return "";
}
repeat("abc", 3);
九、字符串截取算法
显示约定多的字符,多余的字符用…表示
function truncate(str, num) {
if (num > 3){
if (str.length > num){
str = str.slice(0, num-3) + "..."
}
}else{
str = str.slice(0,num) + "..."
}
return str;
}
truncate("A-tisket a-tasket A green and yellow basket", 11);
十、数组分割算法
基本上就是字符串分割算法,这个还是不太合理,需要更加合理的底层算法。
function chunk(arr,size){
var chunk=[];
while(arr.length>0){
chunk.push(arr.splice(0,size));
}
return chunk;
}
chunk(["a", "b", "c", "d"], 2);
十一、数组截断算法
第一个参数从第二个参数开始截断
function slasher(arr, howMany) {
if (howMany > arr.length) {
arr = [];
} else {
arr = arr.splice(howMany)
}
return arr;
}
slasher([1, 2, 3], 1);
十二、数组查询算法
[“hello”, “Hello”]应该返回true,在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。
[“hello”, “hey”]应该返回false,因为字符串”hello”并不包含字符”y”。
function mutation(arr) {
var str1 = arr[0].toLowerCase();
var str2 = arr[1].toLowerCase();
var strArr = str2.split("");
for (var i = 0; i < strArr.length; i++) {
var pos = str1.indexOf(strArr[i]); ////indexOf用于从头到尾检测字符串是否含有字串,它对大小写敏感
if (pos === -1) {
return false;
}
}
return true;
}
mutation(["hello", "hey"]);
十三、删除数组中特定值算法
删除数组中的所有的假值。
在JavaScript中,假值有false、null、0、””、undefined 和 NaN。
function bouncer(arr) {
var t = [];
for (var i = 0; i < arr.length; i++) {
if (Boolean(arr[i])) { //直接转换成布尔值if来判断。
t.push(arr[i]);
}
}
return t;
}
十四、去除数组中任意多个值算法
实现一个 destroyer 函数,第一个参数是初始数组,后跟一个或多个参数。从初始数组中删除与这些参数具有相同值的所有元素。
destroyer([1, 2, 3, 1, 2, 3], 2, 3) 应该返回 [1, 1].
destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3) 应该返回 [1, 5, 1].
这个暂时不太理解,摘自[https://blog.csdn.net/qq_42044073/article/details/82491676]
function destroyer(arr) {
return [].slice.call(arguments).reduce(function (prev, next) {
return prev.filter(e => e !== next);
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
十五、数组排序并插入值算法
function where(arr, num) {
arr.sort(function(a,b){ //首先进行数组的排序
return a - b;
})
for(var i = 0; i < arr.length; i ++){ //遍历数字找到对应的索引
if (arr[i] >= num){
return i;
}else if (num > arr[arr.length-1]){ //如果没有适合的插入点,直接插入到最后
return arr.length;
}
}
}
where([2, 5, 10], 15)