4 A collection of Array methods and functions.
11 Function: Array.each {#Array:Array-each}
12 ----------------------------------
14 Used to iterate through arrays, or iterables that are not regular arrays, such as built in getElementsByTagName calls or arguments of a function.
18 Array.each(iterable, fn[, bind]);
22 1. iterable - (*array*) The array to iterate through.
23 2. fn - (*function*) The function to test for each element.
24 3. bind - (*object*, optional) The object to use as 'this' within the function. For more information see [Function:bind][].
30 fn(item, index, object)
34 1. item - (*mixed*) The current item in the array.
35 2. index - (*number*) The current item's index in the array. In the case of an object, it is passed the key of that item rather than the index.
36 3. object - (*mixed*) The actual array/object.
40 Array.each(['Sun', 'Mon', 'Tue'], function(day, index){
41 alert('name:' + day + ', index: ' + index);
42 }); // alerts 'name: Sun, index: 0', 'name: Mon, index: 1', etc.
46 - [Array:each](#Array:each)
50 This is an array-specific equivalent of *$each* from MooTools 1.2.
54 Function: Array.clone {#Array:Array-clone}
55 ------------------------------------
57 Returns a copy of the passed array.
61 var clone = Array.clone(myArray);
65 1. myArray - (*array*) The array you wish to copy.
69 * (*array*) a copy of the passed array.
73 var myArray = ['red', 'blue', 'green'];
74 var otherArray = Array.clone(myArray);
76 var myArray[0] = 'yellow';
78 alert(myArray[0]); // alerts 'yellow'
79 alert(otherArray[0]) // alerts 'red'
83 This is an array-specific equivalent of *$unlink* from MooTools 1.2.
87 Function: Array.from {#Array:Array-from}
88 ----------------------------------
90 Converts the argument passed in to an array if it is defined and not already an array.
94 var splatted = Array.from(obj);
98 1. obj - (*mixed*) Any type of variable.
102 * (*array*) If the variable passed in is an array, returns the array. Otherwise, returns an array with the only element being the variable passed in.
106 Array.from('hello'); // returns ['hello'].
107 Array.from(['a', 'b', 'c']); // returns ['a', 'b', 'c'].
111 This is equivalent to *$splat* from MooTools 1.2.
115 Array method: each {#Array:each}
116 ---------------------------------
118 Calls a function for each element in the array.
122 myArray.each(fn[, bind]);
126 1. fn - (*function*) The function which should be executed on each item in the array. This function is passed the item and its index in the array.
127 2. bind - (*object*, optional) The object to be used as 'this' in the function. For more information see [Function:bind][].
133 fn(item, index, array)
137 1. item - (*mixed*) The current item in the array.
138 2. index - (*number*) The current item's index in the array.
139 3. array - (*array*) The actual array.
143 //Alerts "0 = apple", "1 = banana", and so on:
144 ['apple', 'banana', 'lemon'].each(function(item, index){
145 alert(index + " = " + item);
146 }); //The optional second argument for binding isn't used here.
151 - [Array.each](#Array:Array-each)
152 - [MDC Array:forEach][]
156 - This method is only available for browsers without native [MDC Array:forEach][] support.
163 Array method: invoke {#Array:invoke}
164 --------------------------
166 Returns an array with the named method applied to the array's contents.
170 var arr = myArray.invoke(method[, arg, arg, arg ...])
174 1. method - (*string*) The method to apply to each item in the array.
175 2. arg - (*mixed*) Any number of arguments to pass to the named method.
179 * (*array*) A new array containing the results of the applied method.
183 var foo = [4, 8, 15, 16, 23, 42];
184 var bar = foo.invoke('limit', 10, 30); //bar is now [10, 10, 15, 16, 23, 30]
188 The method that is invoked is a method of each of the items.
189 If the method does not exist, then an error will be thrown. For example:
191 [0, false, 'string'].invoke('limit', 0, 10); // throws an error!
193 Array method: every {#Array:every}
194 ----------------------------
196 Returns true if every element in the array satisfies the provided testing function.
197 This method is provided only for browsers without native [Array:every][] support.
201 var allPassed = myArray.every(fn[, bind]);
205 1. fn - (*function*) The function to test for each element.
206 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information see [Function:bind][].
212 fn(item, index, array)
216 1. item - (*mixed*) The current item in the array.
217 2. index - (*number*) The current item's index in the array.
218 3. array - (*array*) The actual array.
222 * (*boolean*) If every element in the array satisfies the provided testing function, returns true. Otherwise, returns false.
226 var areAllBigEnough = [10, 4, 25, 100].every(function(item, index){
228 }); // areAllBigEnough = false
233 - [MDC Array:every][]
237 Array method: filter {#Array:filter}
238 ------------------------------
240 Creates a new array with all of the elements of the array for which the provided filtering function returns true.
241 This method is provided only for browsers without native [Array:filter][] support.
245 var filteredArray = myArray.filter(fn[, bind]);
249 1. fn - (*function*) The function to test each element of the array. This function is passed the item and its index in the array.
250 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information see [Function:bind][].
256 fn(item, index, array)
260 1. item - (*mixed*) The current item in the array.
261 2. index - (*number*) The current item's index in the array.
262 3. array - (*array*) The actual array.
266 * (*array*) The new filtered array.
270 var biggerThanTwenty = [10, 3, 25, 100].filter(function(item, index){
272 }); // biggerThanTwenty = [25, 100]
276 - [MDC Array:filter][]
280 Array method: clean {#Array:clean}
281 ----------------------------
283 Creates a new array with all of the elements of the array which are defined (i.e. not null or undefined).
287 var cleanedArray = myArray.clean();
291 * (*array*) The new filtered array.
295 var myArray = [null, 1, 0, true, false, 'foo', undefined, ''];
296 myArray.clean() // returns [1, 0, true, false, 'foo', '']
300 Array method: indexOf {#Array:indexOf}
301 --------------------------------
303 Returns the index of the first element within the array equal to the specified value, or -1 if the value is not found.
304 This method is provided only for browsers without native [Array:indexOf][] support.
308 var index = myArray.indexOf(item[, from]);
312 * (*number*) The index of the first element within the array equal to the specified value. If not found, returns -1.
316 1. item - (*object*) The item to search for in the array.
317 2. from - (*number*, optional: defaults to 0) The index of the array at which to begin the search.
321 ['apple', 'lemon', 'banana'].indexOf('lemon'); // returns 1
322 ['apple', 'lemon'].indexOf('banana'); // returns -1
326 - [MDC Array:indexOf][]
330 Array method: map {#Array:map}
331 ------------------------
333 Creates a new array with the results of calling a provided function on every element in the array.
334 This method is provided only for browsers without native [Array:map][] support.
338 var mappedArray = myArray.map(fn[, bind]);
342 1. fn - (*function*) The function to produce an element of the new Array from an element of the current one.
343 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information see [Function:bind][].
349 fn(item, index, array)
353 1. item - (*mixed*) The current item in the array.
354 2. index - (*number*) The current item's index in the array.
355 3. array - (*array*) The actual array.
359 * (*array*) The new mapped array.
363 var timesTwo = [1, 2, 3].map(function(item, index){
365 }); //timesTwo = [2, 4, 6];
373 Array method: some {#Array:some}
374 --------------------------
376 Returns true if at least one element in the array satisfies the provided testing function.
377 This method is provided only for browsers without native [Array:some][] support.
381 var somePassed = myArray.some(fn[, bind]);
385 * (*boolean*) If at least one element in the array satisfies the provided testing function returns true. Otherwise, returns false.
389 1. fn - (*function*) The function to test for each element. This function is passed the item and its index in the array.
390 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information see [Function:bind][].
396 fn(item, index, array)
400 1. item - (*mixed*) The current item in the array.
401 2. index - (*number*) The current item's index in the array.
402 3. array - (*array*) The actual array.
406 var isAnyBigEnough = [10, 4, 25, 100].some(function(item, index){
408 }); // isAnyBigEnough = true
416 Array method: associate {#Array:associate}
417 ------------------------------------
419 Creates an object with key-value pairs based on the array of keywords passed in and the current content of the array.
423 var associated = myArray.associate(obj);
427 1. obj - (*array*) Its items will be used as the keys of the object that will be created.
431 * (*object*) The new associated object.
435 var animals = ['Cow', 'Pig', 'Dog', 'Cat'];
436 var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
437 sounds.associate(animals);
438 // returns {'Cow': 'Moo', 'Pig': 'Oink', 'Dog': 'Woof', 'Cat': 'Miao'}
442 Array method: link {#Array:link}
443 --------------------------
445 Accepts an object of key / function pairs to assign values.
449 var result = myArray.link(object);
453 1. object - (*object*) An object containing key / function pairs must be passed to be used as a template for associating values with the different keys.
457 * (*object*) The new associated object.
461 var el = document.createElement('div');
462 var arr2 = [100, 'Hello', {foo: 'bar'}, el, false];
464 myNumber: Type.isNumber,
465 myElement: Type.isElement,
466 myObject: Type.isObject,
467 myString: Type.isString,
468 myBoolean: function(obj){ return obj != null; }
470 // returns {myNumber: 100, myElement: el, myObject: {foo: 'bar'}, myString: 'Hello', myBoolean: false}
473 Array method: contains {#Array:contains}
474 ----------------------------------
476 Tests an array for the presence of an item.
480 var inArray = myArray.contains(item[, from]);
484 1. item - (*object*) The item to search for in the array.
485 2. from - (*number*, optional: defaults to 0) The index of the array at which to begin the search.
489 * (*boolean*) If the array contains the item specified, returns true. Otherwise, returns false.
493 ['a', 'b', 'c'].contains('a'); // returns true
494 ['a', 'b', 'c'].contains('d'); // returns false
498 - [MDC Array:indexOf][]
502 Array method: append {#Array:append}
503 ------------------------------
505 Appends the passed array to the end of the current array.
509 var myArray = myArray.append(otherArray);
513 1. otherArray - (*array*) The array containing values you wish to append.
517 * (*array*) The original array including the new values.
521 var myOtherArray = ['green', 'yellow'];
522 ['red', 'blue'].append(myOtherArray); // returns ['red', 'blue', 'green', 'yellow'];
523 myOtheArray; // is now ['red', 'blue', 'green', 'yellow'];
525 [0, 1, 2].append([3, [4]]); // [0, 1, 2, 3, [4]]
529 This is an array-specific equivalent of *$extend* from MooTools 1.2.
533 Array method: getLast {#Array:getLast}
534 --------------------------------
536 Returns the last item from the array.
544 * (*mixed*) The last item in this array.
545 * (*null*) If this array is empty, returns null.
549 ['Cow', 'Pig', 'Dog', 'Cat'].getLast(); // returns 'Cat'
553 Array method: getRandom {#Array:getRandom}
554 ------------------------------------
556 Returns a random item from the array.
564 * (*mixed*) A random item from this array. If this array is empty, returns null.
568 ['Cow', 'Pig', 'Dog', 'Cat'].getRandom(); // returns one of the items
572 Array method: include {#Array:include}
573 --------------------------------
575 Pushes the passed element into the array if it's not already present (case and type sensitive).
579 myArray.include(item);
583 1. item - (*object*) The item that should be added to this array.
587 * (*array*) This array with the new item included.
591 ['Cow', 'Pig', 'Dog'].include('Cat'); // returns ['Cow', 'Pig', 'Dog', 'Cat']
592 ['Cow', 'Pig', 'Dog'].include('Dog'); // returns ['Cow', 'Pig', 'Dog']
596 If you want to push the passed element even if it's already present, use
597 the vanilla javascript:
601 Array method: combine {#Array:combine}
602 --------------------------------
604 Combines an array with all the items of another. Does not allow duplicates and is case and type sensitive.
608 myArray.combine(array);
612 1. array - (*array*) The array whose items should be combined into this array.
616 * (*array*) This array combined with the new items.
620 var animals = ['Cow', 'Pig', 'Dog'];
621 animals.combine(['Cat', 'Dog']); //animals = ['Cow', 'Pig', 'Dog', 'Cat'];
625 Array method: erase {#Array:erase}
626 ----------------------------
628 Removes all occurrences of an item from the array.
636 1. item - (*object*) The item to search for in the array.
640 * (*array*) This array with all occurrences of the item removed.
644 ['Cow', 'Pig', 'Dog', 'Cat', 'Dog'].erase('Dog') // returns ['Cow', 'Pig', 'Cat']
645 ['Cow', 'Pig', 'Dog'].erase('Cat') // returns ['Cow', 'Pig', 'Dog']
649 Array method: empty {#Array:empty}
650 ----------------------------
660 * (*array*) This array, emptied.
664 var myArray = ['old', 'data'];
665 myArray.empty(); //myArray is now []
668 Array method: flatten {#Array:flatten}
669 --------------------------------
671 Flattens a multidimensional array into a single array.
679 * (*array*) A new flat array.
683 var myArray = [1,2,3,[4,5, [6,7]], [[[8]]]];
684 var newArray = myArray.flatten(); //newArray is [1,2,3,4,5,6,7,8]
688 Array method: pick {#Array:pick}
689 --------------------------
690 Returns the first defined value of the array passed in, or null.
694 var picked = [var1, var2, var3].pick();
698 * (*mixed*) The first variable that is defined.
699 * (*null*) If all variables passed in are `null` or `undefined`, returns `null`.
703 function say(infoMessage, errorMessage){
704 alert([errorMessage, infoMessage, 'There was no message supplied.'].pick());
706 //or more MooTools 1.2 style using Generics
707 Array.pick([errorMessage, infoMessage, 'There was no message supplied.']);
710 say(); // alerts 'There was no message supplied.'
711 say('This is an info message.'); // alerts 'This is an info message.'
712 say('This message will be ignored.', 'This is the error message.'); // alerts 'This is the error message.'
717 This is equivalent to *$pick* from MooTools 1.2.
721 Array method: hexToRgb {#Array:hexToRgb}
722 ----------------------------------
724 Converts an hexadecimal color value to RGB. Input array must be the following hexadecimal color format.
729 myArray.hexToRgb([array]);
733 1. array - (*boolean*, optional) If true is passed, will output an array (e.g. \[255, 51, 0\]) instead of a string (e.g. "rgb(255, 51, 0)").
737 * (*string*) A string representing the color in RGB.
738 * (*array*) If the array flag is set, an array will be returned instead.
742 ['11', '22', '33'].hexToRgb(); // returns 'rgb(17, 34, 51)'
743 ['11', '22', '33'].hexToRgb(true); // returns [17, 34, 51]
747 - [String:hexToRgb](/Types/String/#hexToRgb)
751 Array method: rgbToHex {#Array:rgbToHex}
752 ----------------------------------
754 Converts an RGB color value to hexadecimal. Input array must be in one of the following RGB color formats.
755 \[255, 255, 255\], or \[255, 255, 255, 1\]
759 myArray.rgbToHex([array]);
763 1. array - (*boolean*, optional) If true is passed, will output an array (e.g. \['ff', '33', '00'\]) instead of a string (e.g. '#ff3300').
767 * (*string*) A string representing the color in hexadecimal, or 'transparent' string if the fourth value of rgba in the input array is 0 (rgba).
768 * (*array*) If the array flag is set, an array will be returned instead.
772 [17, 34, 51].rgbToHex(); // returns '#112233'
773 [17, 34, 51].rgbToHex(true); // returns ['11', '22', '33']
774 [17, 34, 51, 0].rgbToHex(); // returns 'transparent'
778 - [String:rgbToHex](/Types/String/#rgbToHex)
782 [Function:bind]: /core/Native/Function/#Function:bind
783 [MDC Array]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array
784 [MDC Array:every]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/every
785 [MDC Array:filter]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/filter
786 [MDC Array:indexOf]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf
787 [MDC Array:map]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/map
788 [MDC Array:some]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/some
789 [MDC Array:forEach]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/forEach
790 [Array:every]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/every
791 [Array:filter]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/filter
792 [Array:indexOf]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf
793 [Array:map]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/map
794 [Array:some]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/some