【问题标题】:Checking through an Object and returning if the element is found检查对象并返回是否找到该元素
【发布时间】:2016-01-22 01:21:25
【问题描述】:

尽管对象中的某些数组在其中包含多个元素,但我试图为在对象中找到的项目返回 true。例如 selectedEventTypes[9] 有一个 [cancelled,cancelled2,cancelled3] 数组,尽管当 item.eventType 被 cancelled2 时,它永远不会意识到它在 Object 中并且总是为此返回 false。

private function eventFilterFucntion(item:Object):Boolean
{   
    if(selectedEventTypes.indexOf(item.eventType)>-1)
    {
        return true;
    }
    return false;
}

【问题讨论】:

  • 您的代码看起来不错。您能否展示一下您是如何创建selectedEventTypes 数组和item 对象的?

标签: apache-flex actionscript flash-builder


【解决方案1】:

您似乎已将 selectedEventTypes 定义为 ArrayArray,例如:

private var selectedEventTypes:Array = [["A1", "A2"],
        ["B1","B2"],
        ["C1","C2"],
        ["D1","D2"],
        ["E1","E2"],
        ["F1","F2"],
        ["G1","G2"],
        ["H1","H2"],
        ["I1","I2"],
        ["Cancelled", "Cancelled2", "Cancelled3"],
        ["Received","Last"]];

在哪里

selectedEventTypes[9] = ["Cancelled", "Cancelled2", "Cancelled3"]

在这种情况下,您可以如下更改您的 eventFilterFunction

private function eventFilterFucntion(item:Object):Boolean
    {
        for each(var eachArray:Array in selectedEventTypes)
        {
            if(eachArray.indexOf(item.eventType) > -1)
            {
                return true;
            }
        }
        return false;
    }

试试这个示例应用程序:

<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script><![CDATA[
    import mx.collections.ArrayCollection;
    private var selectedEventTypes:Array = [["A1", "A2"],
        ["B1","B2"],
        ["C1","C2"],
        ["D1","D2"],
        ["E1","E2"],
        ["F1","F2"],
        ["G1","G2"],
        ["H1","H2"],
        ["I1","I2"],
        ["Cancelled", "Cancelled2", "Cancelled3"],
        ["Received","Last"]];
    [Bindable]
    private var myArrayCollectionOriginal:ArrayCollection = new ArrayCollection([
        {name:"State 1",eventType:"Submitted"},
        {name:"State 2",eventType:"Cancelled2"},
        {name:"State 3",eventType:"Pending"},
        {name:"State 4",eventType:"Cancelled3"},
        {name:"State 5",eventType:"Failed"},
        {name:"State 6",eventType:"Received"}
        ]);
    [Bindable]
    private var otherArrayCollection:ArrayCollection = new ArrayCollection();
    private function applyFilterButtonClicked():void
    {
        otherArrayCollection = new ArrayCollection(myArrayCollectionOriginal.source)
        otherArrayCollection.filterFunction = eventFilterFucntion;
        otherArrayCollection.refresh();
    }

    private function eventFilterFucntion(item:Object):Boolean
    {
        for each(var eachArray:Array in selectedEventTypes)
        {
            if(eachArray.indexOf(item.eventType) > -1)
            {
                return true;
            }
        }
        return false;
    }
    ]]></fx:Script>
<s:HGroup verticalCenter="0" horizontalCenter="0">
    <s:Panel title="Original collection">
        <s:DataGrid dataProvider="{myArrayCollectionOriginal}"/>
    </s:Panel>
    <s:Button click="{applyFilterButtonClicked()}" label="Apply Filter" />
    <s:Panel title="Filtered Output">
        <s:DataGrid dataProvider="{otherArrayCollection}"/>
    </s:Panel>
</s:HGroup>

</s:Application>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2011-11-12
    • 2011-02-02
    • 1970-01-01
    • 2011-06-12
    • 2021-11-06
    相关资源
    最近更新 更多