用javascript创建堆叠数组



我有一个原始的二维数组,它表示每年100%的版本预算,看起来像:

budget = [['2001-01-01', 100], ['2001-01-02', 110], ... , ['2001-12-31', 140]]

现在我需要为项目创建预算的子数组。例如:

project1 = [['2001-01-01', 10], ['2001-01-02', 11]]

的意思是,它持续2天,使用10%的可用预算。

我通过以下函数创建项目数组:

project1 = [[]];
project1 = new_project(budget, 0, 1, 0.1);
function new_project(origin, start, end, factor) {
    var result = [[]];
    result = origin.slice(parseInt(start), parseInt(end)).map(function (item) {
        return [item[0], parseInt(item[1]) * factor]
    });
    return result;
}
<标题>

我如何通过我创建的项目的值现在减少我的预算数组?我需要通过调用new_project来修改预算,以便获得:

budget = [['2001-01-01', 90], ['2001-01-02', 99],..., ['2001-12-31', 140]]

设置文件

http://jsfiddle.net/gcollect/7DAsL/

您可以使用内置数组forEach()方法来循环遍历预算的子集(即project1)并更改原始预算的值。我创建了一个名为decreaseBudget()的函数,它将为您完成此操作:

function decreaseBudget(original, subset) {
    // Loop over the subset's items.
    subset.forEach(function(item, index){
        // Get the original amount out of the original item.
        // As we are looping over subset it will always have less items then the original 
        // so no need to check if the index is valid.
        var originalItemAmount = original[index][1];
        // Decrease the amount and set it back in it's original place
        original[index][1] = (originalItemAmount - item[1]); 
    });
};

budgetproject1数组作为参数调用,以改变budget数组的值。看看更新后的小提琴吧:http://jsfiddle.net/7DAsL/4/

如果您喜欢decreaseBudget()不会改变原始数组,但返回一个副本,您可以使用array .slice()方法对原始数组进行浅拷贝,对副本进行更改并返回。

我得到了答案。见http://jsfiddle.net/gcollect/7DAsL/2/

<标题> 解决方案
    function new_project(origin, start, end, factor) {
        var result = [
            []
        ];
        result = origin.map(function (item) {
            return [item[0], (item[1] * factor)]
        });
        for (var i = 0; i < result.length; i++) {
            origin[i][1] = parseInt(origin[i][1]) - parseInt(result[i][1]);
        }
        result = origin.slice(parseInt(start), parseInt(end));
        return result;
    };

相关内容

  • 没有找到相关文章

最新更新