AS3:计算数组元素中的项目,然后将它们添加回数组中

时间:2014-02-28 01:56:37

标签: arrays actionscript-3 loops for-loop

我的目标是采用如下所示的数组:

    [{"ct_start_year":"2013","ct_start_month":"07", ct_prog: "1"},     
    {"ct_start_year":"2013","ct_start_month":"07", ct_prog: "2"},
    {"ct_start_year":"2013","ct_start_month":"08", ct_prog: "1"},
    {"ct_start_year":"2012","ct_start_month":"03", ct_prog: "1"},
    {"ct_start_year":"2012","ct_start_month":"04", ct_prog: "1"}]

然后编写一个循环,用于标识每年的程序(“ct_prog”)(“ct_start_year”),评估月份(“ct_start_month”),如果当月有多个程序,则将它们一起添加以生成一个看起来像这样的新数组:

    [{"ct_start_year":"2013","ct_start_month":"07", ct_prog: **"3"**}, 
{"ct_start_year":"2013","ct_start_month":"08", ct_prog: "1"},
    {"ct_start_year":"2012","ct_start_month":"03", ct_prog: "1"},
    {"ct_start_year":"2013","ct_start_month":"04", ct_prog: "1"}]

正如您所看到的,此示例中的一行已“消失”,因为值为1和2的“ct_prog”变为3,因为该年的月份相同(“07”)(“2013”​​) 。如果当月只有一个程序,如2012年的情况,则该行保持不变。

这是我到目前为止所做的:

for (var i:int = 0; i<date_test.length; ++i) {

      if (date_test[i].ct_prog >= 1 && date_test[i].ct_start_year == "2013"){

        if (date_test[i].ct_start_month == date_test[i].ct_start_month){

        trace (date_test[i].ct_prog + date_test[i].ct_start_year + date_test[i].ct_start_month);   
    }
    }

但是跟踪的结果并不令人满意,因为在“2013”​​的情况下,不仅“07”月的节目返回,而且“08”月的节目也是如此 - 我希望第二个节目“if”语句至少会过滤掉它。

另外,我仍然不确定如何1)在“07”月份的ct_prog元素中添加值,以在新数组中生成“3”值; 2)如何将该值添加到新数组并消除数组中的“额外”行,这是现在不必要的。

任何帮助,非常感谢,一如既往!

1 个答案:

答案 0 :(得分:0)

解决此问题的最佳方法是使用哈希表或类似的东西。

你可以将你的'key'设为ct_start_year + ct_start_month(连接成一个超级简单的字符串),你的'value'应该是你可以用该键找到的所有值的'添加'。

代码如下:

{
    var dict:Dictionary = new Dictionary();

    for(var i:uint = 0; i < date_test.lenght; ++i)
    {
        var key:String = date_test[i].ct_start_year + date_test[i].ct_start_month;

        if (dict[key] == null)
          dict[key] = 0;

        dict[key] += date_test[i].ct_prog
    }
}

这种数据结构可以解决很多这样的问题(如果你有一个易于识别的密钥,可以将对象或值分组)。