我有一个原始的二维数组,它表示每年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]);
});
};
以budget
和project1
数组作为参数调用,以改变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;
};
标题>