web前端之路(4)-- JavaScrit常用数组算法总结

参考资料

一: 数组去重

一般简单方法:

function unique(arr) {
    var result = [];
    for (var i in arr) {
        if (result.indexOf(arr[i]) == -1) {
            result.push(arr[i]);
        }
    }
    return result;
}

递归方法:

var unique = function(arr, newArr) {
    var num;
    if (-1 == arr.indexOf(num = arr.shift())) newArr.push(num);
    arr.length && unique(arr, newArr);
}

二: 数组扰乱

function shuffle(array) {
    var copy = [],
        n = array.length,
        i; 
    // 如果还剩有元素。。
    while(n){
        // 随机选取一个元素 
        i =Math.floor(Math.random()* (n--));
        // 移动到新数组中 
        copy.push(array.splice(i,1)[0]);
    }
    return copy;
}

注意: javascript中”- -“后置的优先级大于”- -“前置大于 乘除

三、数组判断

var myArr = new Array();
console.log(Array.isArray(myArr));
console.log(myArr instanceof Array);

四、数组求交集

自己的方法,也是最原始的方法:

function union(myArr1, myArr2) {
    var result = [];
    for (i in myArr1) {
        if (myArr2.indexOf(myArr1[i]) != -1) {
            result.push(myArr1[i]);
        }
    }
    return result;
}

简单的,借助filter

myArr1.filter(function(n) {
    return myArr2.indexOf(n) != -1
})

注意: filter() 方法使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组。

五、数组求并集

貌似也没找到好的方法:

function arrayUnique(array) {
    var a = array.concat();
    for (var i = 0; i < a.length; ++i) {
        for (var j = i + 1; j < a.length; ++j) {
            if (a[i] === a[j]) a.splice(j--, 1);
        }
    }
    return a;
};

六:数组求差集

Array.prototype.differ = function(a) {
    return this.filter(function(i) {
        return a.indexOf(i) < 0;
    });
};

console.log(myArr1.differ(myArr2));

注意:differ 为自己定义的方法

你可能感兴趣的:(JavaScript,web前端)