1. 程式人生 > >js 算法一

js 算法一

dex true col 所有 function 賦值 第一個 push 刪除

1 寫一個函數,去掉a數組中和b數組中相同的元素。

思路一:讓a數組中的元素和b數組中的元素逐個比較,若相同,則刪除。

方法一:

function array_diff(a, b){
    for(var i = 0; i < a.length; i++){
        for(var j = 0; j < b.length; j++){
            if(a[i] == b[j]){
                a.splice(a.indexOf(b[j]), 1); //刪除
                j = -1;  //必須保證a中的每一個元素都從b的第一個元素開始遍歷
} } } return a; }
var a = ["c", "a", "b", "a", "d"];
var b = ["a", "b"];
console.log(array_diff(a, b));

思路二: 讓b數組中的元素和a數組中的元素逐個比較,若相同,則刪除。

方法二:

function array_diff(a, b) {
    for(var i = 0; i < b.length; i++)
    {
        for(var j = 0; j < a.length; j++)
        {
            
if(a[j] == b[i]) { a.splice(j,1); j = j - 1; //保證a中從刪除後的元素開始繼續遍歷 } } } return a; }

註意: 這兩種方法思路類似,都可以實現要求,需要註意的是必須保證所有的元素都要遍歷到,這樣才能做正確判斷。

方法三:特殊技巧

function array_diff(a, b) {
    var temp1 = []; //臨時數組1
    var temp2 = []; //臨時數組2
    
    for
(var i = 0; i < b.length; i++) { temp1[b[i]] = true; //巧妙地方:把數組B的值當成臨時數組1的鍵並賦值為真 //console.log(temp1); }; for (var i = 0; i < a.length; i++) { if (!temp1[a[i]]) { temp2.push(a[i]); // 巧妙地方:同時把數組A的值當成臨時數組1的鍵並判斷是否為真, // 如果不為真說明沒重復,就合並到一個新數組裏,這樣就可以得到一個全新並無重復的數組 } ; }; return temp2; }

js 算法一