在JavaScript中声明和填充多维数组的最有效方法是什么?
我正在做这个:
ff = Array();
for (i = 0; i < 30; i++) {
ff[i] = Array();
ff[i][i] = 1.0;
}
ff[1][2] = 0.041666667;
ff[1][3] = 0.000694444;
ff[2][3] = 0.016666667;
ff[1][4] = 0.000011574;
ff[2][4] = 0.000277778;
ff[3][4] = 0.016666667;
ff[1][5] = 0.000011574;
ff[2][5] = 0.000035315;
ff[3][5] = 0.00211888;
ff[4][5] = 0.1271328;
ff[1][6] = 0.000000025;
ff[2][6] = 0.000000589;
ff[3][6] = 0.000035315;
ff[4][6] = 0.00211888;
ff[5][6] = 0.016666667;
到ff[n][n]
,其中n
可以高达30,这导致数百行声明数组值(即使被最小化,这有关系吗?)自ff[n][n] = 1
和ff[i][j] = 1/(ff[j][i])
以来,我只需要填充数组的"上半部分",因此在声明之后,我循环遍历整个数组并反转"上半部分"以填充"下半部分"。
从你的数字来看,你似乎在尝试在不同的时间单位之间进行转换。
我想如果一个更好的适合不是一个对象。
var seconds = {
day: 86400,
hour: 3600,
minute: 60,
second: 1
};
var conversions = {};
['day','minute','hour','second'].forEach(function(fromUnit){
var subConversions = {};
var fromValue = seconds[fromUnit];
['day','minute','hour','second'].forEach(function(toUnit){
subConversions[toUnit] = fromValue / seconds[toUnit];
});
conversions[fromUnit] = subConversions;
});
function convert(value, from, to){
return value * conversions[from][to];
}
这将给你。
convert(1, 'day','hour') === 24
convert(1, 'day','second') === 86400
convert(3, 'hour','second') === 10800
即使事情比简单的时间转换更复杂,这种方法可能会产生更容易理解的代码。一旦您开始赋予多维数组的元素特殊含义,事情就会变得非常糟糕。
我会做以下事情:然后我将脚本放在一个可以缓存的单独文件中。
ff=[];
ff[0]=[0.041666667,000694444,016666667,000277778,016666667];
ff[1]=[0.041666667,000694444,016666667,000277778,016666667];
ff[2]=[0.041666667,000694444,016666667,000277778,016666667];
ff[3]=[0.041666667,000694444,016666667,000277778,016666667];
ff[4]=[0.041666667,000694444,016666667,000277778,016666667];
ff[5]=[0.041666667,000694444,016666667,000277778,016666667];