我正在尝试将一个对象的所有值添加到一个变量中,但是我似乎将它们连接起来了?
binance.depth("BNBBTC", (error, depth, symbol) => {
a = 0;
for (value in depth.bids){
a += value;
};
console.log(a);
});
这是输出:
00.001081000.001080900.001080800.001080200.001080000.001079700.001079600.001079100
非常感谢任何帮助
答案 0 :(得分:0)
谢谢你们
我需要先将值转换为数字
a += Number(value)
答案 1 :(得分:0)
可能会将value
转换为int,例如
var v = parseInt(value);
a += value;
由于我的声誉低于50,所以无法发表评论:(。
答案 2 :(得分:0)
代码的意外行为是将String
和Number
加在一起的副作用。与其他抱怨将数字添加到字符串或反之亦然的语言不同,JavaScript会隐式地将Number
转换为String
而不会抱怨。
这在2ality Blog Post, JavaScript quirk 1: implicit conversion of values的第2节中讨论。见下文摘录:
2。字符串的隐式转换
在Web开发中,您经常将值作为字符串实际上是数字或布尔值。例如,当用户在表单中输入此类数据时。如果您忘记显式转换这些字符串,那么JavaScript会以两种方式让您感到惊讶:首先,没有警告。其次,值会自动转换,但是会错误地转换。例如,加号运算符(+)是有问题的,因为只要其中一个操作数是字符串,它就会连接字符串。在以下与JavaScript的交互过程中,假设我们正在添加1到5.相反,我们将字符串'5'和'1'连接起来。
> var x = '5'; // wrong assumption: x is a number > x + 1 > '51'
将转换value
的解决方案合并到Number
,可以在ES6的帮助下更简洁地重写上述代码。使用Array#reduce()
总和可以模块化一点。我还为错误处理提供了Error-First Callbacks。
const sumArray = values => values.reduce((sum, value) => (sum + Number(value)), 0)
const getDepth = (data, cb) => {
binance.depth(data, (err, {bids}) => {
if (err) {
return cb(err)
}
return cb(null, sumArray(Object.keys(bids)))
})
}
getDepth('BNBBTC', (err, depth) => {
if (err) {
console.log(err)
} else {
console.log(depth)
}
})
答案 3 :(得分:0)
尝试在添加前将值转换为数字:a + = Number(value)
答案 4 :(得分:0)
所有需要做的就是在字符串
前添加一个+让a =" 10"
让b =" 20"
设c = + a + + b // c = 30
在你的情况下:
a + = + value