Javascript 将对象转换为整型数组并求和值

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){

我想将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){
    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:关键是它们都有龙。他们只是有不同的龙。什么龙?我不知道你们在说什么