在Javascript中声明和填充多维数组的有效方法

时间:2013-03-04 14:11:57

标签: javascript multidimensional-array

在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] = 1ff[i][j] = 1/(ff[j][i])所以在声明之后我遍历整个数组并反转“顶部”一半以填充“底部”一半。

2 个答案:

答案 0 :(得分:2)

通过查看您的数字,您似乎正在尝试在不同的时间单位之间进行转换。

我想知道更好的契合是不是一个对象。

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];
}

这会给你。

  

转换(1,'天','小时')=== 24

     

convert(1,'day','second')=== 86400

     

转换(3,'小时','秒')=== 10800

即使事情比简单的时间转换更复杂,这种方法可能会导致更容易理解的代码。一旦你开始给出多维数组元素的特殊含义,事情就会变得非常难看。

答案 1 :(得分:0)

我会做类似以下的事情:然后我会把脚本放在一个可以缓存的单独文件中。

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];