as3 组合匹配的数组元素,使用数学计算数字

as3 combine elements of array that match, use math to count the numbers

因为找不到解决问题的办法,我的脑子里一直在转。我在网上搜索过以找到完成它的答案或解决方案。我以为我想要的很容易实现,但我做不对。也许它更难或者我只是看错了。

我制作了一个 as3 项目,其中的内容将写入 .txt 文件。每天都会创建一个新文件,这个 txt 文件将保存当天所有操作的数据。

txt 文件如下所示:

79, 2-1-2015, Orange,1,4.00, 15:59:43
79, 2-1-2015, Blue,1,1.00, 15:59:43
80, 2-1-2015, Orange,1,4.00, 16:2:52
80, 2-1-2015, Black,1,1.00, 16:2:52    

(actionumber, date, article, amount, cost, time)

我现在想在我的项目中读取这些数据并查找相同的文章,计算数量和成本并将其作为一行放回新文件中。例如,基于上面的txt文件:

2, Orange, 8.00
1, Blue, 1.00
1, Black, 1.00
total: 4, , 10.00

我知道我可以通过 Filestream 读写文件。 读取文件后,我将内容放入数组并将每一行拆分为不同的元素。但是,当我需要比较和计算时,我就卡住了。

我尝试使用 IndexOf 在数组中进行搜索,但我不知道下一步该怎么做。我阅读了 .concat 并看到了从数组中删除重复项的示例。但我希望基于文章的重复项(数量和成本可能会有所不同)合并计数而不是删除。我认为那是另一杯茶?!

有没有一个很好的例子或者可以指出正确的方向?非常感谢

您可以使用 Object(或关联数组)来存储您的文章,并将它们的名称作为关键字,如下所示:

var url_request:URLRequest = new URLRequest('data.txt')
var url_loader:URLLoader = new URLLoader()
    url_loader.addEventListener(
        Event.COMPLETE,
        function(e:Event){
            load_data(e.target.data);
        }
    )
    url_loader.load(url_request);

function load_data(data:String):void {

    var actions:Object = {};

    // convert all data to an Array
    var temp_arr:Array = data.split(String.fromCharCode(13));

    for(var i = 0; i < temp_arr.length; i++){

        var action_line:String = temp_arr[i];
        // convert every line to an Array
        var action_arr:Array = action_line.split(', ');

        var article:String = action_arr[2];
        var amount:int = action_arr[3];
        var cost:int = action_arr[4];

        if(actions[article]){       

            var t_a:Array = actions[article]
                t_a[0] += int(amount);      // cumulate amount
                t_a[2] += int(cost);        // cumulate cost
            // update article
            actions[article] = t_a;

            // example : actions['Orange'] = [1, 'Orange', 4]
            // =>        actions['Orange'] = [2, 'Orange', 8]

        } else {

            // create new article as an Array
            actions[article] = [int(amount), article, int(cost)];

            // example : actions['Orange'] = [1, 'Orange', 4]

        }

    }

    var amounts:int = 0;
    var costs:int = 0;

    for(var action:String in actions){
        amounts += actions[action][0];
        costs += actions[action][2];
        trace(actions[action][0]+', '+actions[action][1]+', '+actions[action][2].toFixed(2));
    }

    trace('total : '+amounts+', '+costs.toFixed(2));

    // gives : 
    //
    //  1, Black, 1.00
    //  2, Orange, 8.00
    //  1, Blue, 1.00
    //  total : 4, 10.00

}

当然你必须添加将这些数据保存到文本文件中的部分。

希望对您有所帮助。