Created
January 1, 2013 14:20
-
-
Save anonymous/4427822 to your computer and use it in GitHub Desktop.
Array#slice returns an array with the seleted range of items.
Because a new array is created every time you use this method, however, all these arrays are in memory, which means the JavaScript GC (Garbage Collection) has to collect up all of these unused arrays and throw them away. In performance-critical situations, such as in a game-loop that …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.slice_mutate = (function () { | |
var i; | |
return function slice_mutate(from, to) { | |
// first we set the array's length to the item at the "to" position | |
this.length = to; | |
// any items that were after the "to" position will be discarded | |
// from the first item... | |
i = 0; | |
// ...loop through all items before the "from" position... | |
while (i < from) { | |
// ...removing each item as we go | |
this.shift(); | |
i++; | |
} | |
// we have now removed all items before the "from" position | |
// and after the "to" position | |
// and so the array now contains a slice of items between positions | |
// "from" and "to". | |
return this; | |
}; | |
})(); | |
// console shim | |
(function () { | |
if (!window.console) { window.console = {}; } | |
var c = window.console; | |
if (!c.log) { c.log = function () { }; } | |
if (!c.group) { c.group = function (label) { c.log("__" + label + "__"); }; } | |
if (!c.groupEnd) { c.groupEnd = function () { }; } | |
})(); | |
// tests | |
var a = ["a", "b", "c", "d"]; | |
console.group("a.slice(1,3)"); | |
console.log("a: ", a); | |
console.log("returns: ", a.slice(1, 3)); | |
console.log("after: ", a); | |
console.groupEnd(); | |
var b = ["a", "b", "c", "d"]; | |
console.group("b.slice_mutate(1,3)"); | |
console.log("returns: ", b.slice_mutate(1, 3)); | |
console.log("after: ", b); | |
console.groupEnd(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Out of curiosity. Why is the prototype function slice_mutate written as a disclosure? Why not like this: