2

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;

up to ff[n][n]wherenは最大 30 になる可能性があり、配列値を宣言する行が何百行にもなります (縮小された場合でも、これは問題になりますか?)。配列の「上」半分のみを設定する必要があるためff[n][n] = 1ff[i][j] = 1/(ff[j][i])宣言の後、配列全体をループし、「上」半分を反転して「下」半分に設定します。

4

2 に答える 2

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

これはあなたに与えます。

convert(1, '日','時間') === 24

convert(1, '日','秒') === 86400

convert(3, '時間','秒') === 10800

物事が単純な時間変換よりも複雑であっても、このアプローチはおそらくより理解しやすいコードにつながるでしょう。多次元配列の要素に特別な意味を与え始めると、かなり見苦しくなります。

于 2013-03-04T14:32:27.220 に答える
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];
于 2013-03-04T14:22:38.640 に答える