2016-07-29 61 views
1

我在節點js中有一個十六進制值的數組,它有十六進制值,例如:['2ea','1b1'...]。該數組沒有固定數量的值。值的數量可以每次都改變。我一直在想出一個for循環來添加十六進制值。但它沒有工作。請幫忙。下面的代碼是不正確的。將十六進制數組添加在一起

for (var i=0; i<checkSumArray.length; i++) { 
    function CheckSumFinal(c1, c2) { 
     var hexStr = (parseInt(c1, 16) + parseInt(c2, 16)).toString(16); 
     return hexStr; 
     } 

     var n7= CheckSumFinal(checkSumArray[i], checkSumArray[i+1]); 

    } 
+0

將'CheckSumFinal'移出循環初學者,您不需要一遍又一遍地聲明它。 – dlsso

+2

n7會在每一個循環中被覆蓋,這意味着你只會得到'check [n-1] + check [n]'的結果 –

+0

我怎樣才能讓n7每次都不被覆蓋? – jay

回答

2

保持變量外循環,而只是添加了循環

var checkSumArray = ['2ea','1b1', 'fff', '4a1', '1e1'], 
 
    hexStr = 0; 
 

 
for (var i=0; i<checkSumArray.length; i++) { 
 
    hexStr += parseInt(checkSumArray[i], 16); 
 
} 
 

 
hexStr = hexStr.toString(16); 
 

 
document.body.innerHTML = '<pre>' + hexStr + '</pre>'

+0

我不認爲OP想要連接數字。總數似乎是必需的。 –

3

內爲了計算總和超過數組reduce將是完美的。這個想法是首先計算總和,然後將最終答案轉換爲base16字符串。

checkSumArray.reduce(function(p, c){ 
    return p + parseInt(c, 16); 
}, 0).toString(16); 
+0

否循環權? – jay

+0

既然這是node.js,那麼箭頭函數會使這個更好。 '(p,c)=> p + parseInt(c,16)' – 4castle

+0

是的,我只是決定不放置箭頭函數,因爲我看到OP使用舊的函數聲明,不知道他使用什麼版本的節點。 – r0dney