閱讀217 返回首頁    go iPhone_iPad_Mac_apple


js中級腳本算法

區間求值算法

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

sumAll([1, 4]);

傳遞給你一個包含兩個數字的數組。返回這兩個數字和它們之間所有數字的和。最小的數字並非總在最前麵

找出數組間差異算法

function diff(arr1, arr2) {
    var newArr = [];
     var lena =  arr1.length;
     var lenb = arr2.length; 
    for(var i = lena;i >= 0;i--){
         for(var j = lenb;j >= 0;j--){
                if(arr1[i] == arr2[j]){
                    arr1.splice(i,1);
                     arr2.splice(j,1);     
             }
         }
    }
    newArr = arr1.concat(arr2);
    return newArr;
}
diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);

比較兩個數組,然後返回一個新數組,該數組的元素為兩個給定數組中所有獨有的數組元素。換言之,返回兩個數組的差異

數字轉羅馬數字

function convert(num) { 
     var nums = [1000,900,500,400,100,90,50,40,10,9,5,4,1];  
    var romans =["m","cm","d","cd","c","xc","l","xl","x","ix","v","iv","i"];  
    var str = '';  
    nums.forEach(function(item,index,array){   //forEach方法中的function回調支持3個參數,第1個是遍曆的數組內容;第2個是對應的數組索引,第3個是數組本身
        while(num >= item){  
            str += romans[index];  
            num -= item;  
        }  
     });  
    return str.toUpperCase();  
}  
convert(36); 

將給定的數字轉換成羅馬數字。所有返回的 羅馬數字 都應該是大寫形式

對象搜索算法

function where(collection, source) {
    var arr = [];
    var porp=Object.keys(source);   //Object.keys()方法返回一個數組傳入對象,返回屬性名
    arr=collection.filter(function(obj){
        for(var i=0; i<porp.length; i++){
            if(obj[porp[i]]!==source[porp[i]]){  //判斷參數1中各個對象的porp屬性的值是否與參數二中的porp屬性值相等
                return false;
            }
        }
         return true;
    });  
    return arr;
}
where([{ first: "Romeo", last: "Montague",a:"aaa" }, { first: "Mercutio", last: null,b:"bbb" }, { first: "Tybalt", last: "Capulet",d:"ddd",c:"ccc" }], { last: "Capulet", c:"ccc"});

寫一個 function遍曆一個對象數組(第一個參數)並返回一個包含相匹配的屬性-值對(第二個參數)的所有對象的數組。如果返回的數組中包含 source 對象的屬性-值對,那麼此對象的每一個屬性-值對都必須存在於 collection 的對象中。

例如,如果第一個參數是 [{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }],第二個參數是 { last: "Capulet" },那麼你必須從數組(第一個參數)返回其中的第三個對象,因為它包含了作為第二個參數傳遞的屬性-值對

查詢替換算法

function myReplace(str, before, after) {  
    var len = before.length;
    if(before.charAt(0)>'A' && before.charAt(0)<'Z'){
        after = after.charAt(0).toUpperCase()+after.slice(1);
     }else{
        after = after.toLowerCase();
    }
    str = str.replace(before,after);
    return str;
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "Leaped");

使用給定的參數對句子執行一次查找和替換,然後返回新句子。

第一個參數是將要對其執行查找和替換的句子。

第二個參數是將被替換掉的單詞(替換前的單詞)。

第三個參數用於替換第二個參數(替換後的單詞)。

注意:替換時保持原單詞的大小寫。例如,如果你想用單詞 "dog" 替換單詞 "Book" ,你應該替換成 "Dog"。

字符串移動插入算法

function translate(str) {
    var vowel = [ "a","e","i","o","u"];
    if(vowel.indexOf(str[0]) != -1){
        return str+"way";
    }
    while(vowel.indexOf(str[0]) == -1){
        str = str.substr(1)+str.substr(0,1);
    }
    return str+"ay";
}
translate("bconsonant");

把指定的字符串翻譯成 pig latin。即把一個英文單詞的第一個輔音或輔音叢(consonant cluster)移到詞尾,然後加上後綴 "ay"。如果單詞以元音開始,你隻需要在詞尾添加 "way" 就可以了

字符配對算法

function pair(str) {  
    var o = {
         'G':'C',
         'C':'G',
         'A':'T',
         'T':'A'
    };
    return str.split('').map((cur) => {
        return [cur,o[cur]];
    })
}
pair("TCG");

DNA 鏈缺少配對的堿基。依據每一個堿基,為其找到配對的堿基,然後將結果作為第二個數組返回。Base pairs(堿基對) 是一對 AT 和 CG,為給定的字母匹配缺失的堿基。在每一個數組中將給定的字母作為第一個堿基返回。

例如,對於輸入的 GCG,相應地返回 [["G", "C"], ["C","G"],["G", "C"]]。字母和與之配對的字母在一個數組內,然後所有數組再被組織起來封裝進一個數組。

字符串查詢補充算法

function fearNotLetter(str) {
    var arr=[];
    var len = str.length;
    for(var i=0;i<len-1;i++){
        var n = str[i+1].charCodeAt() - str[i].charCodeAt();
         if( n >1 ){
            for(var j = 1;j < n;j++){
                arr.push( String.fromCharCode(str[i].charCodeAt()+j) );
            }
        }
    }
    return arr || undefined;
}
fearNotLetter("acg");

從傳遞進來的字母序列中找到缺失的字母並返回它。如果所有字母都在序列中,返回 undefined

輸入檢查算法

function boo(bool) {
    return bool === Boolean(bool);  
}
boo(null);

檢查一個值是否是基本布爾類型,並返回 true 或 false。基本布爾類型即 true 和 false

數組去重算法

function unite(arr1, arr2, arr3) {
    var args = Array.from(arguments);  //Array.from() 方法從一個類似數組或可迭代的對象中創建一個新的數組實例
    var arr = args.reduce(function(prev,cur,index,array){
        return prev.concat(cur);
    });
    return arr.filter(function(item,index,array){
        return array.indexOf(item) === index; //indexOf()方法返回在該數組中第一個找到的元素位置,如果它不存在則返回-1
    });
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1,5]);

寫一個 function,傳入兩個或兩個以上的數組,返回一個以給定的原始數組排序的不包含重複值的新數組。換句話說,所有數組中的所有值都應該以原始順序被包含在內,但是在最終的數組中不包含重複值。非重複的數字應該以它們原始的順序排序,但最終的數組不應該以數字順序排序。

html符號轉實體算法

function convert(str) {
    str=str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");  
    return str;   
}
convert("Hamburgers < Pizza & Tacos")

將字符串中的字符 &、<、>、" (雙引號), 以及 ' (單引號)轉換為它們對應的 HTML 實體

字符串連接算法

function spinalCase(str) {
    var len=str.length;
    for(var i=0;i<len;i++){
        if( str.charCodeAt(i+1)>=65 && str.charCodeAt(i+1)<=90 && str.charCodeAt(i)>=97 && str.charCodeAt(i)<=122 ){
            str = str.replace(str[i+1],' '+str[i+1]);
        }
    }
    str = str.toLowerCase().replace(/_| /g,'-')
     return str;
}
spinalCase("thisIsSpinalTap");

將字符串轉換為 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 這種形式的,也就是以連字符連接所有小寫單詞

斐波納契奇數求和算法

function sumFibs(num) {
    var arr=[1,1];
    for(var i=0;i<num;i++){
        arr[i+2] = arr[i]+arr[i+1];
        if(arr[i+2]>num){
        break;
    }
  }
  arr = arr.filter(function(n){
     if(n%2 === 0){
        return false;
    }
    return true;
  });
  var result = arr.reduce(function(a,b){
    return a+b;
  });
  return result;  
}  
sumFibs(9);

給一個正整數num,返回小於或等於num的斐波納契奇數之和。斐波納契數列中的前幾個數字是 1、1、2、3、5 和 8,隨後的每一個數字都是前兩個數字之和。

例如,sumFibs(4)應該返回 5,因為斐波納契數列中所有小於4的奇數是 1、1、3。

提示:此題不能用遞歸來實現斐波納契數列。因為當num較大時,內存會溢出,推薦用數組來實現

質素求和算法

function sumPrimes(num) {
    var arr = [];
    var isTrue = false;
    var sum = 0;
    var i = 2;
    while(i <= num){
        for(var j=2;j<i;j++){
            if(i%j == 0){
                isTrue = true;
                    break;
            }
        }
        if(!isTrue){
            arr.push(i);
        }
        i++;
         isTrue = false;
    }
    for(var k =0;k<arr.length;k++){
         sum = sum + arr[k];
    }
     return sum;
}
sumPrimes(10);

求小於等於給定數值的質數之和。隻有 1 和它本身兩個約數的數叫質數。例如,2 是質數,因為它隻能被 1 和 2 整除。1 不是質數,因為它隻能被自身整除。給定的數不一定是質數

最小公倍數算法

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

找出能被兩個給定參數和它們之間的連續數字整除的最小公倍數。範圍是兩個數字構成的數組,兩個數字不一定按數字順序排序。

例如對 1 和 3 —— 找出能被 1 和 3 和它們之間所有數字整除的最小公倍數

數組驗證算法

function find(arr, func) {
    arr2=arr.filter(func);
    return arr2[0]; 
}
find([1, 2, 3, 4], function(num){ return num % 2 === 0; });

寫一個 function,它瀏覽數組(第一個參數)並返回數組中第一個通過某種方法(第二個參數)驗證的元素

數組取值算法

function drop(arr, func) {
    var arr2 = arr.filter(func);
    if(arr2.length == 0){
        return arr2;
    }else{
        var start = arr.indexOf(arr2[0]);
        arr.splice(0,start);
        return arr;
    }
}
drop([1, 4, 2, 3], function(n) {return n < 3; });

丟棄數組(arr)的元素,從左邊開始,直到回調函數return true就停止。第二個參數,func,是一個函數。用來測試數組的第一個元素,如果返回fasle,就從數組中拋出該元素(注意:此時數組已被改變),繼續測試數組的第一個元素,如果返回fasle,繼續拋出,直到返回true。最後返回數組的剩餘部分,如果沒有剩餘,就返回一個空數組

數組簡化算法

function steamroller(arr) {
    var result = [];
    for(var i=0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            result = result.concat(steamroller(arr[i]));
        }else{
            result.push(arr[i]);
        }
    }
    return result;
}
steamroller([1, [2], [3, [[4],6]]]);

對嵌套的數組進行扁平化處理。你必須考慮到不同層級的嵌套

二進製轉字符算法

function binaryAgent(str) {
    var arr=str.split(' ');
    var len = arr.length;
    for(var i=0;i<len;i++){
        var charCode = String.fromCharCode( parseInt(arr[i],2) );
        arr.splice(i,1,charCode);
    }
     return arr.join('');
}
binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111");

傳入二進製字符串,翻譯成英語句子並返回。二進製字符串是以空格分隔的

數組元素判斷算法

function every(collection, pre) {
    var bCheck = true;
    for(var i in collection){
        if(!collection[i][pre]){
            bCheck = false;
        }
    }
    return bCheck;
}
every([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex");

完善編輯器中的every函數,如果集合(collection)中的所有對象都存在對應的屬性(pre),並且屬性(pre)對應的值為真。函數返回ture。反之,返回false。

記住:隻能通過中括號來訪問對象的變量屬性(pre)。

提示:可以有多種實現方式,最簡潔的方式莫過於Array.prototype.every()

函數迭代可選參數算法

function add() {
    var a=0;
    if(typeof arguments[0] !== "number" || (arguments.length > 1 && typeof arguments[1] !== "number")){
        return undefined;
    }
    if(arguments.length == 1){
        var arg0 = arguments[0];
        return function(num){
            if(typeof num !== "number"){
                return undefined;
            }
            return arg0 + num;
        };
    }else{
        return arguments[0] + arguments[1];
    }
}
add(2,6,3);

創建一個計算兩個參數之和的 function。如果隻有一個參數,則返回一個 function,該 function 請求一個參數然後返回求和的結果。

例如,add(2, 3) 應該返回 5,而 add(2) 應該返回一個 function。

調用這個有一個參數的返回的 function,返回求和的結果:

var sumTwoAnd = add(2);

sumTwoAnd(3) 返回 5。

如果兩個參數都不是有效的數字,則返回 undefined

最後更新:2017-07-03 17:31:56

  上一篇:go  7月3日雲棲精選夜讀:強大的PyTorch:10分鍾讓你了解深度學習領域新流行的框架
  下一篇:go  為什麼程序員適合做自由職業者