JS 算法一
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; }
注意: 这两种方法思路类似,都可以实现要求,需要注意的是必须保证所有的元素都要遍历到,这样才能做正确判断。
思路三:通过给数组b的元素加一个键(true)来判断。
方法三:
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; }