Hi,

If you've only got laTable as a flat array then a bisect search like that
is about as good as it gets; if you're going to do a lot of lookups for
particular sets of keys you could consider building an index, e.g.

        var lmIndex = {};
        for (var i = 0; i < laTable.length; i++)
                lmIndex[Search(laTable[i])] = laTable[i];

        var match = lmIndex[tmSearch.key];


You'd have to cache lmIndex for each set of keys and rebuild the index if
the model changes.

John

On 04/01/2012 03:47, "Simon White" <[email protected]> wrote:

>Hi
>
>I would appreciate feedback on the following search function. I would
>like to know if there are more efficient ways of accomplishing my goal
>of finding items in a store the quickest way possible.  It will be used
>on ordered JSON stores as follows:
>
>myStore.dcSeek({key: ["TABLE","ATYPE","NAME"],value:
>"VMMASTER.DBFFCARD"});
>
>The store in this case is order by three fields TABLE, ATYPE and NAME
>and I want to find the item whose TABLE == "VMMASTER.DBF" and ATYPE
>=="F" and NAME == "CARD"
>
>I tested it on a store with 2410 items and it finds the correct value in
>10 tries and found a match at laTable[2336].
>
>dcSeek : function(tmSearch) {
>// get the model's data array
>     var laTable = this.getModel().get(this.getTable()).toArray();
>     var lcTxt = "";
>     var lcPlus = "";
>
>// build the text for the search function body
>
>     for (i=0; i<tmSearch.key.length; i++){
>        lcTxt = lcTxt+lcPlus+"mRecord.get('"+tmSearch.key[i]+"')"
>        lcPlus="+"
>     }
>
>// create a search function to retrieve the required array items
>
>     var Search = new Function("mRecord","return "+lcTxt)
>     var lnMin = 0;
>     var lnMax = laTable.length;
>     var lcKey = "";
>     while (lnMin <= lnMax)
>     {
>         lnMid = parseInt((lnMin+lnMax)/2);
>         this.mRecord = laTable[lnMid];
>         lcKey = Search(this.mRecord).toUpperCase();
>         if (lcKey > tmSearch.value){
>             lnMax = lnMid -1;
>         } else if (lcKey < tmSearch.value){
>             lnMin = lnMid +1;
>         } else {
>             return true;
>         }
>     }
>     this.mRecord = null;
>     return false
>}
>
>
>
>
>On 03/01/2012 3:27 PM, Simon White wrote:
>> Hi
>>
>> This maybe more of a javascript question than QooxDoo and is due to my
>> as yet inadequate knowledge of the inner workings of Javascript.
>>
>> I have an array in the form of:
>>
>> Menu = [{id: "TEST1",color: "blue",name: "myBlue"},
>>      {id: "TEST36",color: "grey",name: "myGrey"},
>>      {id: "TEST2",color: "red",name: "myRed"},
>>      {id: "TEST34",color: "grey",name: "anotherGrey"}]
>>
>> In my case the array has more than 1000 elements and I want to find the
>> item containing the color == "grey" and the name =="myGrey".  Is there a
>> means to use the indexOf method or do I need to just create my own
>> function for searching?
>>
>> I was trying to use a builtin methods assuming it would be faster than
>> my custom code.
>>
>> Thanks
>> Simon
>>
>>
>> 
>>-------------------------------------------------------------------------
>>-----
>> Write once. Port to many.
>> Get the SDK and tools to simplify cross-platform app development. Create
>> new or port existing apps to sell to consumers worldwide. Explore the
>> Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
>> http://p.sf.net/sfu/intel-appdev
>
>
>
>--------------------------------------------------------------------------
>----
>Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
>infrastructure or vast IT resources to deliver seamless, secure access to
>virtual desktops. With this all-in-one solution, easily deploy virtual
>desktops for less than the cost of PCs and save 60% on VDI infrastructure
>costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
>_______________________________________________
>qooxdoo-devel mailing list
>[email protected]
>https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel




------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to