Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中添加而不是连接对象_Javascript_Arrays_Sum - Fatal编程技术网

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