我的目标是采用如下所示的数组:
[{"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)如何将该值添加到新数组并消除数组中的“额外”行,这是现在不必要的。
任何帮助,非常感谢,一如既往!
答案 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
}
}
这种数据结构可以解决很多这样的问题(如果你有一个易于识别的密钥,可以将对象或值分组)。