scratch – Rev 117

Subversion Repositories:
Rev:
/*************************************************************************/
/*    Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3    */
/*************************************************************************/
if (!Array.prototype.product) {
    Array.prototype.product = function(b) {
        var a = this;
        return $.map(
            new Array(Math.max(this.length, a.length)),
            function(e, i) {
                var o = {};
                o[a[i]] = b[i];
                return o;
            });
    };
}
$.extend({
    product: function(a, b) {
        return $.map(
            new Array(Math.max(this.length, a.length)),
            function(e, i) {
                var o = {};
                o[a[i]] = b[i];
                return o;
            });
    }
});

/*************************************************************************/
/*    Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3    */
/*************************************************************************/
if (!Array.prototype.stride) {
    Array.prototype.stride = function(s) {
        return this.filter(function(e, i) {
            return i % s === 0;
        });
    };
}
$.extend({
    stride: function(a, s) {
        return a.filter(function(e, i) {
            return i % s === 0;
        });
    }
});

/*************************************************************************/
/*    Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3    */
/*************************************************************************/
if (!Array.prototype.chunk) {
    Array.prototype.chunk = function(n) {
        if (!this.length) {
            return [];
        }
        return [this.slice(0, n)]
            .concat(this.slice(n).chunk(n));
    };
}
$.extend({
    chunk: function(a, n) {
        if (!a.length) {
            return [];
        }
        return [a.slice(0, n)]
            .concat(a.slice(n).chunk(n));
    }
});

/*************************************************************************/
/*    Copyright (C) 2017 Wizardry and Steamworks - License: GNU GPLv3    */
/*************************************************************************/
/*stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript*/
/*************************************************************************/
if (!Array.prototype.equals) {
    // attach the .equals method to Array's prototype to call it on any array
    Array.prototype.equals = function(a) {
        // if the other array is a falsy value, return
        if (!a) {
            return false;
        }

        // compare lengths - can save a lot of time 
        if (this.length !== a.length) {
            return false;
        }

        for (var i = 0, l = this.length; i < l; i++) {
            // Check if we have nested arrays
            if (this[i] instanceof Array && a[i] instanceof Array) {
                // recurse into the nested arrays
                if (!this[i].equals(a[i])) {
                    return false;
                }
            } else if (this[i] !== a[i]) {
                // Warning - two different object instances will never be equal: {x:20} != {x:20}
                return false;
            }
        }
        return true;
    };
}

$.extend({
    equals: function(a) {
        // if the other array is a falsy value, return
        if (!a) {
            return false;
        }

        // compare lengths - can save a lot of time 
        if (this.length !== a.length) {
            return false;
        }

        for (var i = 0, l = this.length; i < l; i++) {
            // Check if we have nested arrays
            if (this[i] instanceof Array && a[i] instanceof Array) {
                // recurse into the nested arrays
                if (!this[i].equals(a[i])) {
                    return false;
                }
            } else if (this[i] !== a[i]) {
                // Warning - two different object instances will never be equal: {x:20} != {x:20}
                return false;
            }
        }
        return true;
    }
});