js中級腳本算法

1區間求值算法挑戰javascript

function sumAll(arr) {
   if(arr[0]>arr[1]){ var m=arr[1]; arr[1]=arr[0]; arr[0]=m; }
   var sum=0;
   for(var i=arr[0];i<=arr[1];i++){ sum+=i; }
return sum;
}

2找出數組間差別算法挑戰html

function diff(arr1, arr2) {
var newArr = [];
var newArr2=[];
newArr=arr1.filter(function(item){

      return  arr2.indexOf(item)<0;
})
newArr2=arr2.filter(function(item){
    return arr1.indexOf(item)<0;
})
newArr=newArr.concat(newArr2);
return newArr;
}

3.阿拉伯數字轉羅馬數字java

function convert(num) {
   var a=[["","I","II","III","IV","V","VI","VII","VIII","IX"],  
                          ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],  
                          ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"],
                           ["","M","MM","MMM"]];  
  var i=a[3][Math.floor(num/1000)];
  var j=a[2][Math.floor(num%1000/100)];
  var k=a[1][Math.floor(num%100/10)];
  var l=a[0][num%10];
  return  i+j+k+l;
}

4對象搜索算法挑戰web

function where(collection, source) {
var arr = [];
// What's in a name?
var curr_key="";
for (var key in source) {
    console.log(key);     //獲取key值
    console.log(source[key]); //獲取對應的value值
    curr_key=key;
}
arr=collection.filter(function(item){
    return item[curr_key]==source[curr_key];
})
return arr;
}

5.字符串查詢替換算法挑戰算法

function myReplace(str, before, after) {
  var a=str.indexOf(before);
  if(65<=str[a].charCodeAt()&&str[a].charCodeAt()<=90){
      after=after[0].toUpperCase()+after.slice(1);
  }
  str=str.replace(before, after);
return str;
}

6.字符串移動插入算法挑戰數組

function translate(str) {
    str=str.toLowerCase();
    var yy=['a','e','i','o','u'];
    var num=0;
    if(yy.indexOf(str[0])>=0){
        str+='way';
    }else{
        for(var i=0;i<str.length;i++){
            if(yy.indexOf(str[i])>=0){
             num=i;
            break;
            }

        }
       /* if(num-1>0){ var str1=str.substr(0,num); }else{ var str1=str[0]; }*/
       var str1=str.substr(0,num); 
        var str2=str.substr(num);
        str=str2+str1+'ay';

    }
return str;
}

7.字符配對算法挑戰app

function pair(str) {
    str=str.split("");
    var aa=[];
    for(var i=0;i<str.length;i++){
        var bb=[];
        switch (str[i]) {
            case 'A':
                bb.push("A");
                bb.push("T");
                // code
                break;
             case 'T':
                 bb.push("T");
                 bb.push("A");
                break;
             case 'C':
                  bb.push("C");
                  bb.push("G");
                // code
                break;

            default:
                 bb.push("G");
                 bb.push("C");
        }
        aa.push(bb);
    }

return aa;
}

8字符串查詢補充算法挑戰svg

function fearNotLetter(str) {
    var flag=undefined;
    for(var i=0;i<str.length-1;i++){
        var num1=str.charCodeAt(i);
        var num2=str.charCodeAt(i+1);
        if(1!=num2-num1){
           var codeNum=num1+1;
           flag=String.fromCharCode(codeNum);
           break;
        }
    }
    return flag;
}

fearNotLetter("abce");

9.輸入檢查算法挑戰函數

function boo(bool) {
// What is the new fad diet for ghost developers? The Boolean.
if(typeof bool==='boolean'){
    return true;
}else{
    return false;
}
}

boo(true);

10數組去重算法挑戰ui

function unite(arr1, arr2, arr3) {
    var len=arguments.length;
    var itemdemo=arguments[0];
    for(var i=1;i<len;i++){
       arguments[i]=arguments[i].filter(function(item){
            return itemdemo.indexOf(item)<0;
        });
        itemdemo=itemdemo.concat(arguments[i]);
    }
    return itemdemo;
}

11html符號轉實體算法挑戰

function convert(entity) {
// &colon;&rpar;
    var converHtmlEntities={  
        '&':'&amp;',  
        '<':'&lt;',  
        '>':'&gt;', 
         '\"':'&quot;',
         '\'':'&apos;',
    };  
    return entity.split('').map(function(entity){  
        return converHtmlEntities[entity] || entity;  
    }).join('');  
}

convert("Dolce & Gabbana");

12字符串鏈接算法挑戰

function spinalCase(str) {
// "It's such a fine line between stupid, and clever."
// --David St. Hubbins
str=str.replace(/_|\s+/g,"-");
str=str.replace(/(\B[A-Z])/g,"-$1");
//str=str.replace(/[A-Z]/g,'-');

str=str.toLowerCase();
return str;
}

spinalCase('thisIsSpinalTap');

13斐波納契奇數求和算法挑戰

function sumFibs(num) {
    var sum=2;
    var a = 1;
    var b = 1;
    var c = 0;
     if(num==1){
        return 0; 
     }else if(num==2){
         return 2;
     }else{
         while(c<=num){
         if(c%2!=0){
            sum+=c;
        }
          c = a + b;
          a = b;
          b = c;   
         }

    }
    return sum;
}

14質素求和算法挑戰

function isPrime(num){
    // 不是數字或者數字小於2
    if(typeof num !="number" || !Number.isInteger(num)){      // Number.isInterget 判斷是否爲整數
        return false;
    }

    //2是質數
    if(num == 2){
        return true; 
    }else if(num % 2 == 0){  //排除偶數
        return false;
    }
    //依次判斷是否能被奇數整除,最大循環爲數值的開方
    var squareRoot = Math.sqrt(num);
    //由於2已經驗證過,因此從3開始;且已經排除偶數,因此每次加2
    for(var i = 3; i <= squareRoot; i += 2) {
      if (num % i == 0) {
         return false;
      }
    }
    return true;
}
function sumPrimes(num) {
  var counter = 0;
    for(var i = 2; i <=num; i++){
        if(isPrime(i)){
            counter += i;
        }
    }
    return counter;  
}

15最小公倍數算法挑戰

function smallestCommons(arr) {
  arr=arr.sort();  
  var num=arr[0];
for(var i=arr[0]+1;i<=arr[1];i++){ num*=i/gcd(i,num); }
  return num;
}
 function gcd(m,n){
  if(m%n===0)return n;
  return gcd(n,m%n);
 }

16數組驗證算法挑戰

function find(arr, func) {
var num = 0;
var flag=false;
for(var i=0;i<arr.length;i++){
    num=arr[i];
    flag=func(num);
    if(true==flag){
        return num;
        break;

    }
}
return undefined;
}

17數組取值算法挑戰

function drop(arr, func) {
// Drop them elements.
var flag=false;
var num=[];
for(var i=0;i<arr.length;i++){

   flag=func(arr[i]);
   if(true==flag){
     num=arr.slice(i);
     break;
   }
}
return num;
}

18數組平鋪算法挑戰

function steamroller(arr) {
// I'm a steamroller, baby
for(var i=0;i<arr.length;i++){
   if(true==Array.isArray(arr[i])){
     steamroller(arr[i]) ; 
   }else{
       new_arr.push(arr[i]);
   }
}
return new_arr;
}
var new_arr=[];
steamroller([1, {}, [3, [[4]]]]);
方法二:
function steamroller(arr) {
// I'm a steamroller, baby
 var newArr = [];

    for (var i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
            // 若是是數組,調用(遞歸)steamroller 將其扁平化
            // 而後再 push 到 newArr 中
            newArr.push.apply(newArr, steamroller(arr[i]));
        } else {
            // 不是數組直接 push 到 newArr 中
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

19二進制轉字符算法挑戰

function binaryAgent(str) {
 var arg = str.split(" ");
            var temp, i;
            var newArg = new Array();
            for (i = 0; i < arg.length; i++) {
                temp = String.fromCharCode(parseInt(arg[i], 2));
                newArg.push(temp);
            }
            return newArg.join("");
}

20數組元素判斷算法挑戰

function every(collection, pre) {
// Is everyone being true?
for(var i=0;i<collection.length;i++){
    var obj=collection[i];
    if(!obj[pre]){
        return false;
    }
}
return true;
}

21函數迭代可選參數算法挑戰

function add() {
    var num=arguments.length;
    var sum=0;
    if(1==num&&"number"!=typeof(arguments[0])){
        return undefined;
    }else if(1==num&&"number"==typeof(arguments[0])){
        var curr=arguments[0]
        return function(y){
            if("number"==typeof(y)){
                return curr+y;
            }
        }
    }else{
        if(arguments[num-1])
    for(var i=0;i<num;i++){
        var obj=arguments[i];
        if("number"!=typeof(obj)){
            return undefined;
        }else{
           sum+=obj; 
        }
    }
    return sum;
    }
}