0
var dril1 = (count1[0]*m[1])+(count1[1]*m[2])+(count1[2]*m[3])+(count1[3]*m[4])+(count1[4]*m[5])+(count1[5]*m[6]);
var dril2 = (count2[0]*m[1])+(count2[1]*m[2])+(count2[2]*m[3])+(count2[3]*m[4])+(count2[4]*m[5])+(count2[5]*m[6]);
var dril3 = (count3[0]*m[1])+(count3[1]*m[2])+(count3[2]*m[3])+(count3[3]*m[4])+(count3[4]*m[5])+(count3[5]*m[6]);
var dril4 = (count4[0]*m[1])+(count4[1]*m[2])+(count4[2]*m[3])+(count4[3]*m[4])+(count4[4]*m[5])+(count4[5]*m[6]);
var dril5 = (count5[0]*m[1])+(count5[1]*m[2])+(count5[2]*m[3])+(count5[3]*m[4])+(count5[4]*m[5])+(count5[5]*m[6]);
var dril6 = (count6[0]*m[1])+(count6[1]*m[2])+(count6[2]*m[3])+(count6[3]*m[4])+(count6[4]*m[5])+(count6[5]*m[6]);

このコードを書く他の可能な方法はありますか?

4

6 に答える 6

2

これ:

var counts = [ count1, count2, count3, count4, count5, count6 ];

その後:

var drils = counts.map(function ( count ) {
    return count.reduce(function ( prev, curr, i ) {
        return prev + curr * m[ i + 1 ];
    }, 0 );
});

Array メソッドは、配列.map()に基づいて結果の新しい配列を返しcountsます。.reduce()Array メソッドは、各要素を 1 つの値に減らしますcount

于 2012-10-04T16:27:15.980 に答える
0

count[1...6]実際にdrill[1...6]は独自の配列である必要があります。その後、要素をループして、そのように呼び出しを行うことができます。

var drill = []
for(var i = 0; i < count.length; i++){
    drill.push((count[i][0]*m[1]/* rest of the statement */));
于 2012-10-04T16:21:40.947 に答える
0

2D 配列を使用してから double for ループを使用できるように見えますか?

于 2012-10-04T16:22:28.320 に答える
0

少なくとも、合計をループで実行できます。

var dril1 = 0, dril2 = 2, ...;
for (i = 0; i < 5; ++i) {
    dril1 += count1[i] * m[i + 1];
    dril2 += count2[i] * m[i + 1];
    . . .
}

dril1、...、dril6およびcount1、...count6が 2 つの配列である場合は、さらに圧縮できます。

于 2012-10-04T16:23:51.143 に答える
0

計算をリファクタリングできます。

function calc(count) {
  return count[0] * m[1] + count[1] * m[2] + count[2] * m[3] + count[3] * m[4] + count[4] * m[5] + count[5] * m[6];
}

var dril1 = calc(count1);
var dril2 = calc(count2);
var dril3 = calc(count3);
var dril4 = calc(count4);
var dril5 = calc(count5);
var dril6 = calc(count6);
于 2012-10-04T16:24:14.577 に答える
0

ドリルごとに、次のことができます。

var dril1 = (count1[0]*m[1])+(count1[1]*m[2])+(count1[2]*m[3])+(count1[3]*m[4]) +(count1[4]*m[5])+(count1[5]*m[6]);

var dril1 = 0;
var dril2 = 0;
for (var i=0, len=count1.length; i<len; i++) {
  dril1 += (count1[i]*m[i+1]);
  dril2 += (count2[i]*m[i+1]);
}

ただし、それぞれが配列のメンバーとしてカウントされている場合:

var dril = [];
for (var i=0, lenI=count.length; i<lenI; i++) {
  dril[i] = 0;
  for (var j=0, lenJ=count[i].length; j<lenJ; j++) {
    dril[i] += (count[i][j]*m[j+1]);
  }
}
于 2012-10-04T16:24:56.183 に答える