首页 > 代码库 > js 算法一

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;
}

 

注意: 这两种方法思路类似,都可以实现要求,需要注意的是必须保证所有的元素都要遍历到,这样才能做正确判断。

 

方法三:特殊技巧

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 算法一