UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

101 lines (96 loc) 2.79 kB
define(["dojo/_base/kernel", "dojo/_base/lang", "dojo/_base/array"], function(dojo, lang, arr){ var collections = lang.getObject("dojox.collections", true); collections.DictionaryEntry=function(/*string*/ k, /*object*/ v){ // summary: // return an object of type dojox.collections.DictionaryEntry this.key=k; this.value=v; this.valueOf=function(){ return this.value; // object }; this.toString=function(){ return String(this.value); // string }; } /* Iterators * The collections.Iterators (Iterator and DictionaryIterator) are built to * work with the Collections included in this module. However, they *can* * be used with arrays and objects, respectively, should one choose to do so. */ collections.Iterator=function(/*array*/ a){ // summary: // return an object of type dojox.collections.Iterator var position=0; this.element=a[position]||null; this.atEnd=function(){ // summary: // Test to see if the internal cursor has reached the end of the internal collection. return (position>=a.length); // bool }; this.get=function(){ // summary: // Get the next member in the collection. if(this.atEnd()){ return null; // object } this.element=a[position++]; return this.element; // object }; this.map=function(/*function*/ fn, /*object?*/ scope){ // summary: // Functional iteration with optional scope. return arr.map(a, fn, scope); }; this.reset=function(){ // summary: // reset the internal cursor. position=0; this.element=a[position]; }; } /* Notes: * The DictionaryIterator no longer supports a key and value property; * the reality is that you can use this to iterate over a JS object * being used as a hashtable. */ collections.DictionaryIterator=function(/*object*/ obj){ // summary: // return an object of type dojox.collections.DictionaryIterator var a=[]; // Create an indexing array var testObject={}; for(var p in obj){ if(!testObject[p]){ a.push(obj[p]); // fill it up } } var position=0; this.element=a[position]||null; this.atEnd=function(){ // summary: // Test to see if the internal cursor has reached the end of the internal collection. return (position>=a.length); // bool }; this.get=function(){ // summary: // Get the next member in the collection. if(this.atEnd()){ return null; // object } this.element=a[position++]; return this.element; // object }; this.map=function(/*function*/ fn, /*object?*/ scope){ // summary: // Functional iteration with optional scope. return arr.map(a, fn, scope); }; this.reset=function() { // summary: // reset the internal cursor. position=0; this.element=a[position]; }; }; return collections; });