Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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 在es6(TypeScript)中,如何在不知道键名的情况下求和值_Javascript_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript 在es6(TypeScript)中,如何在不知道键名的情况下求和值

Javascript 在es6(TypeScript)中,如何在不知道键名的情况下求和值,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,我有这个东西。钥匙是可变的。它们不是固定的,所以我不想依赖键 接口Inf{ [键:字符串]:数字 } 常量对象:Inf={ '2020-01-01': 4, '2020-01-02': 5, } 常量obj2:Inf={ '2020-01-05': 10, '2020-02-10': 15, } 常量finalObj={1:obj,2:obj2,…} 我想做的是sum10+15+4+5,不管它们的键名是什么。我安装了lodash,它有sumBy,但它不包括数组输入,然而,我的是完整对象 如何使

我有这个东西。钥匙是可变的。它们不是固定的,所以我不想依赖

接口Inf{
[键:字符串]:数字
}
常量对象:Inf={
'2020-01-01': 4,
'2020-01-02': 5,
}
常量obj2:Inf={
'2020-01-05': 10,
'2020-02-10': 15,
}
常量finalObj={1:obj,2:obj2,…}
我想做的是
sum
10+15+4+5,不管它们的键名是什么。我安装了
lodash
,它有
sumBy
,但它不包括数组输入,然而,我的是完整对象

如何使用此对象总共获得
34
?事实上,我的问题是,做这种手术的最佳方式是什么?我知道我能做到

设x=0
Object.values(obj.forEach)(o=>{
x+=o
})
但是有更好的办法吗?也许更短更快?

您可以使用和作为总和。仅适用于一个级别的对象,如示例中所示

const obj={
"2020-01-01": 4,
"2020-01-02": 5,
};
常数obj2={
"2020-01-05": 10,
"2020-02-10": 15,
};
常量finalObj={1:obj,2:obj2};
const result=Object.values(finalObj).reduce((a,b)=>a+Object.values(b).reduce((a1,b1)=>a1+b1,0),0);
控制台日志(结果)您可以使用和来求和。仅适用于一个级别的对象,如示例中所示

const obj={
"2020-01-01": 4,
"2020-01-02": 5,
};
常数obj2={
"2020-01-05": 10,
"2020-02-10": 15,
};
常量finalObj={1:obj,2:obj2};
const result=Object.values(finalObj).reduce((a,b)=>a+Object.values(b).reduce((a1,b1)=>a1+b1,0),0);

控制台日志(结果)可以对嵌套对象采用递归方法

const
add=object=>object
.值(对象)
.reduce((s,v)=>s+(v&&typeof v==='object'?添加(v):v),0),
一={'2020-01-01':4,'2020-01-02':5},
两个={'2020-01-05':10,'2020-02-10':15},
finalObj={1,2},
总计=加总(finalObj);

控制台日志(总计)可以对嵌套对象采用递归方法

const
add=object=>object
.值(对象)
.reduce((s,v)=>s+(v&&typeof v==='object'?添加(v):v),0),
一={'2020-01-01':4,'2020-01-02':5},
两个={'2020-01-05':10,'2020-02-10':15},
finalObj={1,2},
总计=加总(finalObj);

控制台日志(总计)您已在注释中阐明,您只处理单个层(如问题所示)。我可能会使用一个简单的嵌套循环:

let sum = 0;
for (const obj of Object.values(finalObj)) {  // Loop through the objects
    for (const value of Object.values(obj)) { // Loop through the values
        sum += value;
    }
}
这非常类似,但保持循环的明确性。:-)

实例:

const obj={
"2020-01-01": 4,
"2020-01-02": 5,
};
常数obj2={
"2020-01-05": 10,
"2020-02-10": 15,
};
常量finalObj={1:obj,2:obj2};
设和=0;
for(对象值的常量对象(finalObj)){
for(对象的常量值。值(obj)){
总和+=数值;
}
}

控制台日志(总和)您已在注释中阐明,您只处理单个层(如问题所示)。我可能会使用一个简单的嵌套循环:

let sum = 0;
for (const obj of Object.values(finalObj)) {  // Loop through the objects
    for (const value of Object.values(obj)) { // Loop through the values
        sum += value;
    }
}
这非常类似,但保持循环的明确性。:-)

实例:

const obj={
"2020-01-01": 4,
"2020-01-02": 5,
};
常数obj2={
"2020-01-05": 10,
"2020-02-10": 15,
};
常量finalObj={1:obj,2:obj2};
设和=0;
for(对象值的常量对象(finalObj)){
for(对象的常量值。值(obj)){
总和+=数值;
}
}

控制台日志(总和)“我知道我能行”该版本不起作用,
o
将是一个对象引用,而不是一个数字。你需要多大的灵活性?一级对象?两个?需要多少就多少?我已经修好了<代码>值
而不是
条目
finalObj
有4个孩子。每个孩子都是这样。我说的是固定版本
finalObj
的值是对象引用。啊!很抱歉只有一个级别。“我知道我能行”该版本不起作用,
o
将是一个对象引用,而不是一个数字。你需要多大的灵活性?一级对象?两个?需要多少就多少?我已经修好了<代码>值
而不是
条目
finalObj
有4个孩子。每个孩子都是这样。我说的是固定版本
finalObj
的值是对象引用。啊!很抱歉只有一个级别。这对我总结其他嵌套(3个级别)对象非常有用,但是我无法添加类型转换。就像我使用打字脚本一样。我必须把
作为任何
赋予所有对象:
s
始终是数字。我仍然必须把
v
作为我猜想的任何对象。因为TS说,
运算符“+”不能应用于类型“number”和“unknown”。TS(2365)
这对于我对其他嵌套(3级)对象求和非常有用,但是我无法添加类型转换。就像我使用打字脚本一样。我必须把
作为任何
赋予所有对象:
s
始终是数字。我仍然必须把
v
作为我猜想的任何对象。因为TS表示运算符“+”不能应用于类型“number”和“unknown”。TS(2365)