2017-02-02 97 views
0

我有一個由jQuery獲取的php json_encode對象。我想要做的是總結這個數組。這是我到目前爲止所做的:一個JavaScript數組的總和返回所有數字的字符串連接

var json = $.parseJSON(data); 
var tot = new Array(); 
for (var i = 0; i < json.length; ++i) { 
    tot.push(json[i].final_total); 
    $('table tbody').append("<tr><td>" + json[i].order_id + "</td><td>" + json[i].final_total + "</td></tr>"); 
} 

現在我想總結這個數組。我嘗試這樣做:

var sum = tot.reduce(function(pv, cv) { return pv + cv; }, 0); 
$("#total").html(sum); 

但結果是:

09.748.529.129.129.119.59.79.89.79.89.79.79.79.79.79.79719.248.59.79 ...... 

我也試過:

myFunction(tot); 

function getSum(total, num) { 
    return total + num; 
} 
function myFunction(item) { 
    document.getElementById("total").innerHTML = item.reduce(getSum); 
} 

但我得到上述(旁邊寫着對方號碼)相同的結果。

我也試過這樣:

var tot = 0; 
for (var i = 0; i < json.length; ++i) { 
    tot += json[i].final_total); 
    $('table tbody').append("<tr><td>" + json[i].order_id + "</td><td>" + json[i].final_total + "</td></tr>"); 
} 
$("#total").html(tot); 

但我得到上述(旁邊寫着對方號碼)相同的結果。

那麼在javascript中求和數組的正確方法是什麼?

+0

使用['parseInt函數()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) – happymacarts

+0

好像'JSON [我] .final_total'是字符串,所以你的減少只是連接它們。你可以例如'tot.push(+ json [i] .final_total);'。一元'+'會將該值作爲數字進行投射。 –

+0

[JavaScript字符串和數字轉換](http:// stackoverflow。com/questions/971039/javascript-string-and-number-conversion) – Makyen

回答

3

你必須使用parseInt(數字是否整數),parseFloat(如果他們是浮標)或Number(如果不知道)明確地將其解釋爲類似的數字:

sum = tot.reduce((a, n) => (a + Number(n)), 0); 
+0

非常感謝,它工作正常。 –

3

數組元素strings,爲了正確地添加它們,它們必須被強制轉換爲integer

var sum = tot.reduce(function(a, b) { 
    return parseFloat(a) + parseFloat(b); 
}, 0); 

MDN摘自:

連接運算符(+)連接兩個字符串值一起返回另一個字符串,它是兩個操作數字符串的並集。

這是由+運算符用於字符串連接和添加引起的常見問題。問題最好用下面的例子來描述:

var result = '1' + 3 + 3 +7 //result is '1337' 

編輯:@Pointy - 很好,趕上,謝謝! :)

+0

這些值看起來像是分數部分,所以'parseInt()'是錯誤的方法。 – Pointy

+0

另外不需要parseInt'a'。它已經是一個數字。 –

1

,你將需要使用解析INT,因爲它的串聯刺痛而不是添加整數

VAR總和= tot.reduce(功能(PV,CV){返回parseInt函數(PV)+ parseInt函數(CV);}, 0);

parseInt

相關問題