js 算法一
阿新 • • 發佈:2017-05-22
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 算法一