如何遍历Binance API返回的JSON数组并累加买卖盘数量
问题分析
你的代码存在几个关键错误:
- 初始把
bidsQuantity赋值为单个bid的数量字符串,而非数组,后续调用length和push都是错误操作 - 循环条件用
bidsQuantity.length完全不符合需求,应该遍历binanceTrade.bids数组的长度 - 循环内部每次重置
j=1,无法实现遍历所有bid项 - 直接用
push赋值给原变量,push返回的是数组新长度,会导致变量类型混乱
正确实现代码
首先,Binance API返回的bids和asks数组中,每一项的第二个元素是字符串格式的数量,需要先转为数值再累加。以下是正确的求和逻辑:
// 假设data是从Binance API获取的原始响应文本 const binanceTrade = JSON.parse(data); // 计算所有bid的数量总和 let totalBidQuantity = 0; for (const bid of binanceTrade.bids) { // 把字符串转成数值,累加 totalBidQuantity += Number(bid[1]); } // 计算所有ask的数量总和 let totalAskQuantity = 0; for (const ask of binanceTrade.asks) { totalAskQuantity += Number(ask[1]); } console.log("所有买单数量总和:", totalBidQuantity); console.log("所有卖单数量总和:", totalAskQuantity);
或者用更简洁的数组reduce方法:
const binanceTrade = JSON.parse(data); const totalBidQuantity = binanceTrade.bids.reduce((sum, bid) => sum + Number(bid[1]), 0); const totalAskQuantity = binanceTrade.asks.reduce((sum, ask) => sum + Number(ask[1]), 0); console.log("买单总量:", totalBidQuantity); console.log("卖单总量:", totalAskQuantity);
关键说明
- Binance返回数值为字符串是为了避免浮点精度丢失,所以必须用
Number()或parseFloat()转换后再计算 - 无论是
for...of循环还是reduce方法,核心都是遍历整个bids/asks数组,逐个累加数量元素
内容的提问来源于stack exchange,提问作者CitronW
相关产品推荐
相关产品推荐

