2012-10-04 63 views
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]); 

有沒有其他可能的方法來寫這段代碼?如何以正確的方式編寫此JavaScript代碼?

+1

如果這些計數變量是在一個數組中,那麼是... –

+0

「是否有其他可能的方式來編寫這段代碼?就在這裏。我喜歡什麼時候是一個是/否的問題。 – epascarello

+0

順便說一句,你不需要parens - 乘法在加法之前。 –

回答

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 */)); 
0

看起來你可能可能使用二維數組,然後使用雙循環?

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,...,dril6count1,...,count6兩個陣列。

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); 
+0

你是不是要在'calc'而不是'count1'中使用'count'? –

+0

@TedHopp:是的。我已經修好了。 :) – Guffa

0

對於每個DRIL你可以做:

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]); 
    } 
} 
+1

else if(plastic> 0)var count1 = [「101」,「101」,「101」,「101」,「101」,「101」]; var count2 = [「101」,「101」,「101」,「101」,「101」,「101」]; var count3 = [「101」,「101」,「101」,「101」,「101」,「101」]; var count4 = [「101」,「101」,「101」,「101」,「101」,「101」]; var var4 = var count5 = [「101」,「101」,「101」,「101」,「101」,「101」]; var var5 = var count6 = [「2.17」,「9」,「12.5」,「25」,「33.33」,「50」]; – itradoRD

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

.map()陣列方法將返回一個新的arr ay基於counts陣列的結果。 .reduce()數組方法會將每個count元素減少爲單個值。

+0

用於.map()函數的+1。你能解釋一下你的代碼嗎? reduce()和map()是做什麼的? –

+0

@PaoloStefan我推薦MDN:[map](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map),[reduce](https://developer.mozilla。 org/en-US/docs/JavaScript/Reference/Global_Objects/Array/reduce) –

+0

這樣做有什麼好處嗎?除了感覺像老闆,95%的人看着你的代碼混淆了嗎?;) – rrowland