简体   繁体   English

合并两个ArrayCollection-Flex

[英]Merge two ArrayCollection - Flex

I have two ArrayCollection and I want to merge them into one... 我有两个ArrayCollection,我想将它们合并为一个...

arr1 = 
[0] -> month = 07
       tot_err = 15
[1] -> month = 08
       tot_err = 16
[2] -> month = 09
       tot_err = 17


arr2 = 
[0] -> month = 07
       tot_ok = 5
[1] -> month = 08
       tot_ok = 6
[2] -> month = 09
       tot_ok = 7

I would like to have this array 我想要这个数组

arr3 = 
[0] -> month = 07
       tot_err = 15
       tot_ok = 5
[1] -> month = 08
       tot_err = 16
       tot_ok = 6
[2] -> month = 09
       tot_err = 17
       tot_ok = 7    

How can I do it? 我该怎么做?

EDIT: 编辑:

I did this solution: 我做了这个解决方案:

        private function mergeArrays(a:ArrayCollection, b:ArrayCollection):ArrayCollection
        {
            for (var i:int=0;i<a.length;i++)
                for each(var item:Object in b)
                {                   
                    if( a[i].month == item.month){
                         a[i].tot_err = item.tot_err;
                    }
                }
            return a;
        }

But there is an important problem, if array2 ( b ) has a item.month that there isn't in the array1 ( a ) the value is lost... 但是有一个重要的问题,如果array2( b )有一个item.month ,而array1( a )中没有这个值,则会丢失...

private function mergeArrays(a:ArrayCollection, b:ArrayCollection):ArrayCollection
{
    var result:ArrayCollection = new ArrayCollection();
    var months:Dictionary = new Dictionary();
    for (var i:int = 0; i < a.length; i++)
    {
        var mergedItem:Object = new Object();
        mergedItem.month = a[i].month;
        mergedItem.tot_ok = a[i].tot_ok;
        mergedItem.tot_err = null;
        for (var j:int = 0; j < b.length; j++)
        {                   
            if(a[i].month == b[j].month)
            {
                mergedItem.tot_err = b[j].tot_err;
            }
        }
        month[mergedItem.month] = true;
        result.addItem(mergedItem);
    }
    // so far we have handled all occurrences between a and b,
    // now we need to handle the items from b that are left
    for each (var bItem:Object in b)
    {
        mergedItem = new Object();
        mergedItem.month = bItem.month;
        mergedItem.tot_err = bItem.tot_err;
        mergedItem.tot_ok = null;
        if (months[mergedItem.month] == null)
        {
            month[mergedItem.month] = true;
            result.addItem(mergedItem);
        }
    }
    return result;
}
if( a[i].month == item.month){
   a[i].tot_err = item.tot_err;
   // remove the item from b here. dontknow arraycollection
   // should be like b.remove(item);
}

after for loops you can check if "b" still have elements, so you can add them to "a", dont forget to give "b" array objects a default tot_ok value. 在for循环之后,您可以检查“ b”是否还包含元素,因此可以将它们添加到“ a”,不要忘记为“ b”数组对象赋予默认的tot_ok值。 And another thing if an object in "a" that doesnt have equalivant in "b" you can use this. 还有另一件事,如果“ a”中的对象与“ b”中不相等,则可以使用此对象。

    private function mergeArrays(a:ArrayCollection, b:ArrayCollection):ArrayCollection
    {
        var ex:Boolean = true;
        for (var i:int=0;i<a.length;i++){
            for each(var item:Object in b)
            {                   
                if( a[i].month == item.month){
                     a[i].tot_err = item.tot_err;
                     ex = true;
                }else{
                     ex = false;
                }
            }
            if(!ex){
               // give a default value here.
               a[i].tot_err = 0;
            }
        }


        return a;
    }
private function mergeArrayCollections(a:ArrayCollection, b:ArrayCollection):ArrayCollection {
    var c:ArrayCollection=new ArrayCollection(b.toArray()); //clone b so as not to modify b
    //This loop handles all objects common to a and b
    for each(var o:Object in a) {
        for (var i:int=0; i<c.length; i++) {
            var p:Object=c.getItemAt(i);
            if(o.month==p.month) {
                //if the month is the same then add the property to a
                o.tot_ok=p.tot_ok;
                c.removeItemAt(i);
                break;
            }
        }
    }
    //This loop adds the leftover items from c to a
    for each(var q:Object in c) {
        q.tot_err=-1; //add this so that all objects in a are uniform
        a.addItem(q);
    }
    return a; //Unnecessary return, a will be modified by reference
}

如果array2(b)的item.month不在array1(a)中,则使用addItem()方法将新对象添加到array1(a)中;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM