# Wizardry and Steamworks JavaScript Libraries

`was.js` was.js General Purpose Library

# Compare Arrays

The following code:

```// attach the .equals method to Array's prototype to call it on any array
Array.prototype.equals = function (array) {
// if the other array is a falsy value, return
if (!array)
return false;

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

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

will add an `.equals` call to arrays so you can use it as:

```var a = [ "a", "b" ];
var b = [ "a", "c" ];

# Linearly Map a Value in a Range into another Range

Following the formula to linearly map a value in a range to another range, the javascript variation thereof can be found here.

```/*************************************************************************/
/*    Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3    */
/*************************************************************************/
function wasMapValueToRange(value, xMin, xMax, yMin, yMax) {
return yMin + (
( yMax - yMin ) * ( value - xMin ) / ( xMax - xMin )
);
}```

# RGB Color to Hexadecimal Color

```function wasRGBToHex(r, g, b) {
return "#" + (
(1 << 24) +
(r << 16) +
(g << 8) +
b
).toString(16).slice(1);
}```

where `r`, `g` and `b` are in the range .

# Hexadecimal Color to RGB Color

```function wasHexToRGB(hex) {
var shortRegEx = /^#?([a-f\d])([a-f\d])([a-f\d])\$/i;
hex = hex.replace(
shortRegEx,
function(m, r, g, b) {
return r + r + g + g + b + b;
}
);

var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})\$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
}```

where `hex` can be in long or short CSS notation.