Javascript 将对象转换为整型数组并求和值
我想将JavaScript对象转换为integer类型的数组,并添加数组中的所有值,然后转换回object 到目前为止,我尝试了以下方法:Javascript 将对象转换为整型数组并求和值,javascript,jquery,arrays,javascript-objects,Javascript,Jquery,Arrays,Javascript Objects,我想将JavaScript对象转换为integer类型的数组,并添加数组中的所有值,然后转换回object 到目前为止,我尝试了以下方法: //Convert object to array var arr = Object.keys(some_object).map(function(k){ return some_object[k]; }) //Remove null values var arr_without_null = arr.filter(function(n){
//Convert object to array
var arr = Object.keys(some_object).map(function(k){
return some_object[k];
})
//Remove null values
var arr_without_null = arr.filter(function(n){
return n != undefined;
})
//Convert array to array of type int
var arrOfNumbers = arr_without_null.map(function(x){
return parseInt(x);
});
//Add all the values
self.sum = arrOfNumbers.reduce(add, 0);
function add(a,b){
return a+b;
}
console.log("sum values: ", sum);
但这看起来很难看,而且距离我想要实现的目标还有太多的步骤。有没有更好的方法实现同样的目标
注意:我不介意用jquery实现这一点,但我更喜欢javascript。谢谢基于您的解决方案,您可以“合并”几个步骤
//Convert object to array
var arr = Object.keys(self.data.CallsByDisposition).map(function(k){
return parseInt(self.data.CallsByDisposition[k] || 0)
})
//Add all the values
self.sum = arr.reduce(add, 0);
function add(a,b){
return a + b;
}
console.log("sum values: ", sum);
根据您的解决方案,您可以“合并”几个步骤
//Convert object to array
var arr = Object.keys(self.data.CallsByDisposition).map(function(k){
return parseInt(self.data.CallsByDisposition[k] || 0)
})
//Add all the values
self.sum = arr.reduce(add, 0);
function add(a,b){
return a + b;
}
console.log("sum values: ", sum);
您可以通过将
null
视为0
(因为这是一个求和)来省略过滤器
,这意味着您可以将这两个映射
组合起来。还请注意,对于总和,您不必向reduce
提供第二个参数;第一次调用将只使用前两个条目:
self.sum =
Object.keys(self.data.CallsByDisposition)
.map(function(k) { return parseInt(self.data.CallsByDisposition[k] || "0"); })
.reduce(function(s, e) { return s + e; });
在这里,我们依靠的是null
是虚假的,并使用JavaScript功能强大的|操作符将“0”而不是null传递到parseInt。当然,这也将用
“0”代替
“”(和
false和
NaN以及所有其他伪值),因此根据需要进行调整(您的原始代码只剔除了
null和
未定义的,但留下了
false、
NaN等等)
请参阅下面的1,了解关于parseInt
和数字转换的一般说明
实例:
var self={
数据:{
CallsByDisposition:{
a:7,
b:30,
c:空,
d:5
}
}
};
自和=
Object.key(self.data.CallsByDisposition)
.map(函数(k){return parseInt(self.data.CallsByDisposition[k]| |“0”)})
.reduce(函数(s,e){返回s+e;});
log(“总和值:”,self.sum)
您可以通过将null
视为0
(因为这是一个总和)来省略过滤器,这意味着您可以将这两个映射组合起来。还请注意,对于总和,您不必向reduce
提供第二个参数;第一次调用将只使用前两个条目:
self.sum =
Object.keys(self.data.CallsByDisposition)
.map(function(k) { return parseInt(self.data.CallsByDisposition[k] || "0"); })
.reduce(function(s, e) { return s + e; });
在这里,我们依靠的是null
是虚假的,并使用JavaScript功能强大的|操作符将“0”而不是null传递到parseInt。当然,这也将用
“0”代替
“”(和
false和
NaN以及所有其他伪值),因此根据需要进行调整(您的原始代码只剔除了
null和
未定义的,但留下了
false、
NaN等等)
请参阅下面的1,了解关于parseInt
和数字转换的一般说明
实例:
var self={
数据:{
CallsByDisposition:{
a:7,
b:30,
c:空,
d:5
}
}
};
自和=
Object.key(self.data.CallsByDisposition)
.map(函数(k){return parseInt(self.data.CallsByDisposition[k]| |“0”)})
.reduce(函数(s,e){返回s+e;});
log(“总和值:”,self.sum)代码>嘿,相同的概念。:-)不要忘记基数…或者使用数字(x)|0
或+x | 0
来强制。嘿,相同的概念。:-)不要忘记基数…或者使用Number(x)|0
或+x | 0
来强制。呃,我讨厌对数字调用parseInt
。有龙。好吧,如果你进入太高的数字,但仍然。我更愿意做.map(Number).filter(x=>x)
,它只会留下有效的东西来相加。@vlaz:是的,我应该添加一个关于使用parseInt
的注释。但是在强制或Number
方法中也有龙:Number(“”
是0
。这是真的,但在这种情况下并不重要-.filter(x=>x)
将删除它们以及任何虚假的内容(只有NaN
)即使这样,它们也不会影响总和。@vlaz:关键是它们都有龙。他们只是有不同的龙。什么龙?我不知道你们在说什么,我讨厌打电话询问号码。有龙。好吧,如果你进入太高的数字,但仍然。我更愿意做.map(Number).filter(x=>x)
,它只会留下有效的东西来相加。@vlaz:是的,我应该添加一个关于使用parseInt
的注释。但是在强制或Number
方法中也有龙:Number(“”
是0
。这是真的,但在这种情况下并不重要-.filter(x=>x)
将删除它们以及任何虚假的内容(只有NaN
)即使这样,它们也不会影响总和。@vlaz:关键是它们都有龙。他们只是有不同的龙。什么龙?我不知道你们在说什么