Javascript 在数组中添加而不是连接对象
我试图得到一个对象数组中的总订单价格(以美元为单位),并求和。顺序合计不是对数组求和,而是串联在一起。如何强制加法而不是串联Javascript 在数组中添加而不是连接对象,javascript,arrays,sum,Javascript,Arrays,Sum,我试图得到一个对象数组中的总订单价格(以美元为单位),并求和。顺序合计不是对数组求和,而是串联在一起。如何强制加法而不是串联 <body> <p id=sales></p> <script> var sales, i, x = ""; sales = {"orders": [{"total_price_usd": "92.05"}, {"total_price_usd": "14.90"}, {"total_price_usd": "17.90"
<body>
<p id=sales></p>
<script>
var sales, i, x = "";
sales = {"orders": [{"total_price_usd": "92.05"}, {"total_price_usd": "14.90"}, {"total_price_usd": "17.90"}, {"total_price_usd": "14.90"}]}
for (i in sales.orders) {
x += sales.orders[i].total_price_usd + ', ';
}
var numbers = [x];
function getSum(total, num) {
return parseFloat(total) + parseFloat(num);
}
document.getElementById('sales').innerHTML = '$' + numbers.reduce(getSum);
</script>
</body>
var销售,i,x=“”;
销售={“订单”:[{“总价”:“92.05”},{“总价”:“14.90”},{“总价”:“17.90”},{“总价”:“14.90”}
对于(销售订单中的i){
x+=销售.订单[i].总价\美元+',';
}
变量数=[x];
函数getSum(总计,num){
返回parseFloat(总计)+parseFloat(num);
}
document.getElementById('sales').innerHTML='$'+numbers.reduce(getSum);
在变量上使用parseFloat()
并将x初始化为0应该会有所帮助
var销售,i,x=0;
销售={“订单”:[{“总价”:“92.05”},{“总价”:“14.90”},{“总价”:“17.90”},{“总价”:“14.90”}
对于(销售订单中的i){
x+=parseFloat(销售.订单[i].总价\美元);
}
变量数=[x];
函数getSum(总计,num){
返回parseFloat(总计)+parseFloat(num);
}
document.getElementById('sales').innerHTML='$'+numbers.reduce(getSum)代码>
此行不创建数字数组:
var numbers = [x];
它只是用一个元素,一个字符串创建一个数组,就像您编写了:
var numbers = ["92.05, 14.90, 17.90, 14.90"]
然后,当您调用numbers.reduce()
时,它只处理字符串中的第一个数字,而不循环它们。使用包含字符串的变量不会导致将其解析为Javascript源代码
你应该做:
var numbers = []
for (var i = 0; i < sales.order.length; i++) {
numbers.push(parseFloat(sales.order[i].total_price_usd));
}
只需使用reduce
和Number
构造函数:
sales={“订单”:[{“总价”:“92.05”},{“总价”:“14.90”},{“总价”:“17.90”},{“总价”:“14.90”}
const total=sales.orders.reduce(
(总计、订单)=>总计+数量(订单、总价、美元),
0
)
控制台日志(总计)
- 您可以直接访问阵列
sales.orders
- 在函数中
getSum
获取美元价格num.total\u price\u USD
var sales={“订单”:[{“总价美元”:“92.05”},{“总价美元”:“14.90”},{“总价美元”:“17.90”},{“总价美元”:“14.90”};
//-------------您需要验证这个逻辑
变量i,x=“”
//您正在创建一个数组,如下所示:[“1,2,4,5”]。
对于(销售订单中的i){
x+=销售.订单[i].总价\美元+',';
}
变量数=[x];
//-------------------------------------------
函数getSum(总计,num){
返回parseFloat(总计)+parseFloat(总计价格和美元);
}
document.getElementById('sales').innerHTML='$'+sales.orders.reduce(getSum,0)代码>
那不是。“JSON是一种与文本、语言无关的数据交换格式,很像XML、CSV或YAML。”——numbers
只包含一个逗号分隔的长字符串,您希望如何将其解析为数字?1。total\u price\u usd
的值是一个字符串。2.如果要求和,为什么要添加“”、“
”?服务器将以字符串形式返回总价。这如何解决实际问题?这看起来像是一个风格的改变,但是这个错误仍然存在。你看到了什么真正的问题?我从初始数据开始,返回预期的总数。我想我没有解释原版有什么问题,但问题似乎是关于加法而不是串联。我将添加一个片段。哦,没有看到您更改了正在循环的变量,我以为您刚刚将parseFloat
更改为Number
。哦,这很有意义。是的,那没什么用为什么要用x
和numbers
变量保留第一个循环,而不再使用这些变量?@Barmar用来说明OP面临的问题。听起来像是一个微优化,在大多数程序中不太可能有意义。numbers
数组完全没有意义,调用.reduce()也是如此
var total = 0;
for (var i = 0; i < sales.order.length; i++) {
total += parseFloat(sales.order[i].total_price_usd);
}