2

I'm facing the same problem. Can some explain me with a example?

My code is:

var dataList:ArrayCollection = new ArrayCollection([{name:"alauddn"}, {name:"ansari"}]);

private function getItemInd(event:MouseEvent):void{

    var item:Object = new Object();
    item.name = "ansari";
    var ias:int = dataList.getItemIndex(item);
    Alert.show(ias.toString() + ": " + item.name);
}

But it returns "-1:

Reno
  • 33,594
  • 11
  • 89
  • 102
Alauddin Ansari
  • 250
  • 3
  • 12

3 Answers3

8

getItemIndex is not comparing the value within your arrayCollection. The problem is that the getItemIndex() method matches exact object references, not objects with matching properties.

You should use a solution like this instead :

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationCompleteHandler(event)">

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.events.FlexEvent;

            public var dataList:ArrayCollection = new ArrayCollection([{name:"alauddn"}, {name:"ansari"}]);

            public function getItemIndexByProperty(array:ArrayCollection, property:String, value:String):Number
            {
                for (var i:Number = 0; i < array.length; i++)
                {
                    var obj:Object = Object(array[i])
                    if (obj[property] == value)
                        return i;
                }
                return -1;

                dataList.getItemIndex();
            }

            protected function creationCompleteHandler(event:FlexEvent):void
            {
                var ias:int = getItemIndexByProperty(dataList, "name", "ansari");
                Alert.show(ias.toString() + " : " + dataList.getItemAt(ias).name);
            }

        ]]>
    </fx:Script>

</s:WindowedApplication>
Jivago
  • 826
  • 7
  • 21
  • Besides, if you only want to store key-values informations, I strongly suggest you to use a dictionary or, at least, a dynamic object. – LoremIpsum Dec 21 '11 at 10:42
0

getItemIndex only searches the root object. So for example this would work:

var dataList:ArrayCollection = new ArrayCollection(["alauddn", "ansari"]);

private function getItemInd(event:MouseEvent):void{
    var name:String = "ansari";
    var ias:int = dataList.getItemIndex(name);
    Alert.show(ias.toString() + ": " + name);
}
panupan
  • 1,212
  • 13
  • 15
0

You can use this.

private function getItemInd(event:MouseEvent):void{
for each( var item:Object in dataList){    
if(item.name == "ansari")
{
var ias:int = dataList.getItemIndex(item);
Alert.show(ias.toString() + ": " + item.name);
break;
}
}
} 
Santhosh Nayak
  • 2,312
  • 3
  • 35
  • 65