2 Replies Latest reply on Jun 1, 2006 5:30 AM by poonamsheth

    How to search into an array of objects?

    FredFlex
      Hi,

      Is there a way to find an item into a array of object without parse each object?

      Ex:
      var : myArray : Array = new Array(
      {label : "cup", ref : "345TR3"},
      {label : "glass", ref : "987TR3"},
      {label : "spool", ref : "123XX3"},
      ...)

      How to search for ref "987TR3" and get array index (=1) and label (=glass or = myArray[1].label) ?

      Thank in advance,

      FredFlex
        • 1. Re: How to search into an array of objects?
          ntsiii Level 3
          The ordinary old array does not.

          You could use what is called an "associative array", which is simply an mx bject. This use is very similar to a "hashmap" in other languages.

          To add an element:
          oAssocArray.anyString = AnyObjectOrStringOr anything;

          To retrieve an element:
          var myValue:WhateverType = oAssocArray.anyString;

          You can also look at the ArrayCollection class. I think the "contains" method provides random access.

          Tracy
          • 2. Re: How to search into an array of objects?
            poonamsheth Level 1
            Associative arrays, which are sometimes called hashes or maps, use keys instead of a numeric index to organize stored values. Each key in an associative array is a unique string that is used to access a stored value.

            There are two ways to create associative arrays in ActionScript 3.0. The first way is to use the Object constructor, which has the key advantage of allowing you to initialize your array with an object literal. An instance of the Object class, also called a generic object, is functionally identical to an associative array. Each property name of the generic object serves as the key that provides access to a stored value.

            The following example creates an associative array named monitorInfo, using an object literal to initialize the array with two key and value pairs:

            var monitorInfo bject = {type:"Flat Panel", resolution:"1600 x 1200"};
            trace (monitorInfo["type"], monitorInfo["resolution"]);
            // output: Flat Panel 1600 x 1200

            If you do not need to initialize the array at declaration time, you can use the Object constructor to create the array, as follows:

            var monitorInfo bject = new Object();

            After the array is created using either an object literal or the Object class constructor, you can add new values to the array using either the bracket operator ([]) or the dot operator (.). The following example adds two new values to monitorArray:

            monitorInfo["aspect ratio"] = "16:10"; // bad form, do not use spaces
            monitorInfo.colors = "16.7 million";
            trace (monitorInfo["aspect ratio"], monitorInfo.colors);
            // output: 16:10 16.7 million

            Note that the key named aspect ratio contains a space character. This is possible with the bracket operator, but generates an error if attempted with the dot operator. Using spaces in your key names is not recommended.

            The second way to create an associative array is to use the Array constructor and then use either the bracket operator ([]) or the dot operator (.) to add key and value pairs to the array. If you declare your associative array to be of type Array, you cannot use an object literal to initialize the array. The following example creates an associative array named monitorInfo using the Array constructor and adds a key called type and a key called resolution, along with their values:

            var monitorInfo:Array = new Array();
            monitorInfo["type"] = "Flat Panel";
            monitorInfo["resolution"] = "1600 x 1200";
            trace (monitorInfo["type"], monitorInfo["resolution"]);
            // output: Flat Panel 1600 x 1200

            There is no advantage in using the Array constructor to create an associative array. You cannot use the Array.length property or any of the methods of the Array class with associative arrays, even if you use the Array constructor or the Array data type. The use of the Array constructor is best left for the creation of indexed arrays.