whitespace cleanup
[mootools/dkf.git] / Docs / Native / Hash.md
blob972b7a49bca4b28a3c6b5d17cd964f6799787418
1 Native: Hash {#Hash}
2 ====================
4 A custom Object ({}) implementation which does not account for prototypes when setting, getting, or iterating.
5 Useful because in JavaScript, we cannot use Object.prototype. Instead, we can use Hash.prototype!
8 Hash Method: constructor {#Hash:constructor}
9 --------------------------------------------
11 ### Syntax:
13         var myHash = new Hash([object]);
15 ### Arguments:
17 1. object - (*mixed*) A hash or object to implement.
19 ### Returns:
21 * (*hash*) A new Hash instance.
23 ### Examples:
25         var myHash = new Hash({
26                 aProperty: true,
27                 aMethod: function(){
28                         return true;
29                 }
30         });
31         alert(myHash.has('aMethod')); //Returns true.
35 Hash Method: each {#Hash:each}
36 -------------------------------
38 Calls a function for each key-value pair in the object.
40 ### Syntax:
42         myHash.each(fn[, bind]);
44 ### Arguments:
46 1. fn   - (*function*) The function which should be executed on each item in the Hash. This function is passed the item and its key in the Hash.
47 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information, see [Function:bind][].
49 #### Argument: fn
51 ##### Syntax:
53         fn(value, key, hash)
55 ##### Arguments:
57 1. value - (*mixed*) The current value in the hash.
58 2. key   - (*string*) The current value's key in the hash.
59 3. hash  - (*hash*) The actual hash.
61 ### Examples:
63         var hash = new Hash({first: "Sunday", second: "Monday", third: "Tuesday"});
64         hash.each(function(value, key){
65                 alert("the " + key + " day of the week is " + value);
66         }); //Alerts "the first day of the week is Sunday", "the second day of the week is Monday", etc.
70 Hash Method: has {#Hash:has}
71 ----------------------------
73 Tests for the presence of a specified key in the Hash.
75 ### Syntax:
77         var inHash = myHash.has(item);
79 ### Arguments:
81 1. key - (*string*) The key to search for in the Hash.
83 ### Returns:
85 * (*boolean*) If the Hash has a defined value for the specified key, returns true. Otherwise, returns false.
87 ### Examples:
89         var hash = new Hash({'a': 'one', 'b': 'two', 'c': 'three'});
90         hash.has('a'); //returns true
91         hash.has('d'); //returns false
94 ### Notes:
96 - Testing for a Hash prototype will never return true. Only testing the actual properties of the Hash will return true.
100 Hash Method: keyOf {#Hash:keyOf}
101 --------------------------------
103 Returns the key of the specified value. Synonymous with [Array:indexOf][].
105 ### Syntax:
107         var key = myHash.keyOf(item);
109 ### Arguments:
111 1. item - (*mixed*) The item to search for in the Hash.
113 ### Returns:
115 * (*string*) If the Hash has a the specified item in it, returns the key of that item.
116 * (*boolean*) Otherwise, returns false.
118 ### Examples:
120         var hash = new Hash({'a': 'one', 'b': 'two', 'c': 3});
121         hash.keyOf('two'); //returns 'b'
122         hash.keyOf(3); //returns 'c'
123         hash.keyOf('four') //returns false
125 ### Notes:
127 - Testing for a Hash prototype will never return its key. Only the actual properties of the Hash will return their associated key.
131 Hash Method: hasValue {#Hash:hasValue}
132 --------------------------------------
134 Tests for the presence of a specified value in the Hash.
136 ### Syntax:
138         var inHash = myHash.hasValue(value);
140 ### Arguments:
142 1. value - (*mixed*) The value to search for in the Hash.
144 ### Returns:
146 * (*boolean*) If the Hash has the passed in value in any of the keys, returns true. Otherwise, returns false.
148 ### Examples:
150         var hash = new Hash({'a': 'one', 'b': 'two', 'c': 'three'});
151         hash.hasValue('one'); //returns true
152         hash.hasValue('four'); //returns false
155 Hash Method: extend {#Hash:extend}
156 ----------------------------------
158 Extends this Hash with the key-value pairs from the object passed in.
160 ### Syntax:
162         myHash.extend(properties);
164 ### Arguments:
166 1. properties - (*object*) The object whose items should be extended into this Hash
168 ### Returns:
170 * (*hash*) This Hash, extended.
172 ### Examples:
174         var hash = new Hash({
175                 'name': 'John',
176                 'lastName': 'Doe'
177         });
178         var properties = {
179                 'age': '20',
180                 'sex': 'male',
181                 'lastName': 'Dorian'
182         };
183         hash.extend(properties);
184         //hash now holds an object containing: { 'name': 'John', 'lastName': 'Dorian', 'age': '20', 'sex': 'male' };
188 Hash Method: combine {#Hash:combine}
189 --------------------------------
191 Combines this Hash with the key-value pairs of the object passed in. Does not allow duplicates (old values are **not** overwritten by new ones) and is case and type sensitive.
193 ### Syntax:
195         myHash.combine(properties);
197 ### Arguments:
199 1. properties - (*object*) The object whose items should be combined into this Hash.
201 ### Returns:
203 * (*hash*) This Hash, combined with the new key-value pairs.
205 ### Examples:
207         var hash = new Hash({
208                 'name': 'John',
209                 'lastName': 'Doe'
210         });
211         var properties = {
212                 'name': 'Jane'
213                 'age': '20',
214                 'sex': 'male',
215                 'lastName': 'Dorian'
216         };
217         hash.combine(properties);
218         //hash now holds an object containing: { 'name': 'John', 'lastName': 'Doe', 'age': '20', 'sex': 'male' };
222 Hash Method: erase {#Hash:erase}
223 ----------------------------------
225 Removes the specified key from the Hash.
227 ### Syntax:
229         myHash.erase(key);
231 ### Arguments:
233 1. key - (*string*) The key to search for in the Hash.
235 ### Returns:
237 * (*hash*) This Hash with the specified key and its value removed.
239 ### Examples:
241         var hash = new Hash({
242                 'name': 'John',
243                 'lastName': 'Doe'
244         });
245         hash.erase('lastName');
246         //hash now holds an object containing: { 'name': 'John' };
250 Hash Method: get {#Hash:get}
251 ----------------------------
253 Retrieves a value from the hash.
255 ### Syntax:
257         myHash.get(key);
259 ### Arguments:
261 1. key - (*string*) The key to retrieve in the Hash.
263 ### Returns:
265 * (*mixed*) Returns the value that corresponds to the key if found.
266 * (*false*) null if the key doesn't exist
268 ### Examples:
270         var hash = new Hash({
271                 'name': 'John',
272                 'lastName': 'Doe'
273         });
274         hash.get('name'); //returns 'John'
278 Hash Method: set {#Hash:set}
279 ----------------------------
281 Adds a key-value pair to the hash or replaces a previous value associated with the specified key.
283 ### Syntax:
285         myHash.set(key, value);
287 ### Arguments:
289 1. key   - (*string*) The key to insert or modify in the Hash.
290 2. value - (*mixed*) The value to associate with the specified key in the Hash.
292 ### Returns:
294 * (*hash*) This Hash with the specified key set to the specified value.
296 ### Examples:
298         var hash = new Hash({
299                 'name': 'John',
300                 'lastName': 'Doe'
301         });
302         hash.set('name', 'Michelle'); //hash.name is now 'Michelle'
306 Hash Method: empty {#Hash:empty}
307 --------------------------------
309 Empties the hash.
311 ### Syntax:
313         myHash.empty();
315 ### Examples:
317         var hash = new Hash({
318                 'name': 'John',
319                 'lastName': 'Doe'
320         });
321         hash.empty();
322         //hash now holds an empty object: {}
326 Hash Method: include {#Hash:include}
327 ------------------------------------
329 Includes the specified key-value pair in the Hash if the key doesn't already exist.
331 ### Syntax:
333         myHash.include(key, value);
335 ### Arguments:
337 1. key   - (*string*) The key to insert into the Hash.
338 2. value - (*mixed*) The value to associate with the specified key in the Hash.
340 ### Returns:
342 * (*hash*) This Hash with the specified key included if it did not previously exist.
344 ### Examples:
346         var hash = new Hash({
347                 'name': 'John',
348                 'lastName': 'Doe'
349         });
350         hash.include('name', 'Michelle'); //hash is unchanged
351         hash.include('age', 25); //hash.age is now 25
355 Hash Method: map {#Hash:map}
356 ----------------------------
358 Creates a new map with the results of calling a provided function on every value in the map.
360 ### Syntax:
362         var mappedHash = myHash.map(fn[, bind]);
364 ### Arguments:
366 1. fn   - (*function*) The function to produce an element of the new Hash from an element of the current one.
367 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information see [Function:bind][].
369 #### Argument: fn
371 ##### Syntax:
373         fn(value, key, hash)
375 ##### Arguments:
377 1. value - (mixed) The current value in the hash.
378 2. key   - (string) The current value's key in the hash.
379 3. hash  - (hash) The actual hash.
381 ### Returns:
383 * (*hash*) The new mapped hash.
385 ### Examples:
387         var timesTwo = new Hash({a: 1, b: 2, c: 3}).map(function(item, index){
388                 return item * 2;
389         }); //timesTwo now holds an object containing: {a: 2, b: 4, c: 6};
393 Hash Method: filter {#Hash:filter}
394 ----------------------------------
396 Creates a new Hash with all of the elements of the Hash for which the provided filtering function returns true.
398 ### Syntax:
400         var filteredHash = myHash.filter(fn[, bind]);
402 ### Arguments:
404 1. fn   - (*function*) The function to test each element of the Hash. This function is passed the value and its key in the Hash.
405 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information see [Function:bind][].
407 #### Argument: fn
409 ##### Syntax:
411         fn(value, key, hash)
413 ##### Arguments:
415 1. value - (*mixed*) The current value in the hash.
416 2. key   - (*string*) The current value's key in the hash.
417 3. hash  - (*hash*) The actual hash.
419 ### Returns:
421 * (*hash*) The new filtered hash.
423 ### Examples:
425         var biggerThanTwenty = new Hash({a: 10, b: 20, c: 30}).filter(function(value, key){
426                 return value > 20;
427         }); //biggerThanTwenty now holds an object containing: {c: 30}
430 Hash Method: every {#Hash:every}
431 --------------------------------
433 Returns true if every value in the object satisfies the provided testing function.
435 ### Syntax:
437         var allPassed = myHash.every(fn[, bind]);
439 ### Arguments:
441 1. fn   - (*function*) The function to test each element of the Hash. This function is passed the value and its key in the Hash.
442 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information see [Function:bind].
444 #### Argument: fn
446 ##### Syntax:
448         fn(value, key, hash)
450 ##### Arguments:
452 1. value - (*mixed*) The current value in the hash.
453 2. key   - (*string*) The current value's key in the hash.
454 3. hash  - (*hash*) The actual hash.
456 ### Returns:
458 * (*boolean*) If every value in the Hash satisfies the provided testing function, returns true. Otherwise, returns false.
460 ### Examples:
462         var areAllBigEnough = ({a: 10, b: 4, c: 25, d: 100}).every(function(value, key){
463                 return value > 20;
464         }); //areAllBigEnough = false
467 Hash Method: some {#Hash:some}
468 ------------------------------
470 Returns true if at least one value in the object satisfies the provided testing function.
472 ### Syntax:
474         var anyPassed = myHash.any(fn[, bind]);
476 ### Arguments:
478 1. fn   - (*function*) The function to test each element of the Hash. This function is passed the value and its key in the Hash.
479 2. bind - (*object*, optional) The object to use as 'this' in the function. For more information see [Function:bind][].
481 #### Argument: fn
483 ##### Syntax:
485         fn(value, key, hash)
488 ##### Arguments:
490 1. value - (*mixed*) The current value in the hash.
491 2. key   - (*string*) The current value's key in the hash.
492 3. hash  - (*hash*) The actual hash.
494 ### Returns:
496 * (*boolean*) If any value in the Hash satisfies the provided testing function, returns true. Otherwise, returns false.
498 ### Examples:
500         var areAnyBigEnough = ({a: 10, b: 4, c: 25, d: 100}).some(function(value, key){
501                 return value > 20;
502         }); //isAnyBigEnough = true
506 Hash Method: getClean {#Hash:getClean}
507 --------------------------------------
509 Returns a a clean object from an Hash.
511 ### Syntax:
513         myHash.getClean();
515 ### Returns:
517 * (*object*) a clean object
519 ### Examples:
521         var hash = new Hash({
522                 'name': 'John',
523                 'lastName': 'Doe'
524         });
525         hash = hash.getClean(); // hash doesnt contain Hash prototypes anymore
526         hash.each() //error!
530 Hash Method: getKeys {#Hash:getKeys}
531 ------------------------------------
533 Returns an array containing all the keys, in the same order as the values returned by [Hash:getValues][].
535 ### Syntax:
537         var keys = myHash.getKeys();
539 ### Returns:
541 * (*array*) An array containing all the keys of the hash.
545 Hash Method: getValues {#Hash:getValues}
546 ----------------------------------------
548 Returns an array containing all the values, in the same order as the keys returned by [Hash:getKeys][].
550 ### Syntax:
552         var values = myHash.getValues();
554 ### Returns:
556 * (*array*) An array containing all the values of the hash.
560 Hash Method: getLength {#Hash:getLength}
561 ----------------------------------------
563 Returns the number of keys in the Hash.
565 ### Syntax:
567         var length = myHash.getLength();
569 ### Returns:
571 * (*number*) The length of the Hash.
573 ### Examples:
575         var hash = new Hash({
576                 'name': 'John',
577                 'lastName': 'Doe'
578         });
579         hash.getLength(); // returns 2
583 Hash Method: toQueryString {#Hash:toQueryString}
584 ------------------------------------------------
586 Generates a query string from key/value pairs in an object and URI encodes the values.
588 ### Syntax:
590         var queryString = myHash.toQueryString();
592 ### Arguments:
594 1. source - (*object*) The object to generate the query string from.
596 ### Returns:
598 * (*string*) The query string.
600 ### Examples:
602 #### Using Hash generic:
604         Hash.toQueryString({apple: "red", lemon: "yellow"}); //returns "apple=red&lemon=yellow"
606 #### Using Hash instance:
608         var myHash = new Hash({apple: "red", lemon: "yellow"});
609         myHash.toQueryString(); //returns "apple=red&lemon=yellow"
612 Utility Functions {#Utility}
613 ============================
615 Function: $H {#H}
616 -----------------
618 Shortcut for the new [Hash](/Core/#Hash).
620 ### See Also:
622 - [Hash][]
625 [Hash]: #Hash
626 [Array:indexOf]: /Native/Array/#Array:indexOf
627 [Hash:getKeys]: #Hash:getKeys
628 [Hash:getValues]: #Hash:getValues
629 [Function:bind]: Native/Function#Function:bind