【问题标题】:How can I get the total number for an object's properties in typescript? [duplicate]如何在打字稿中获取对象属性的总数? [复制]
【发布时间】:2020-02-14 05:51:24
【问题描述】:

我正在使用一个对象来存储状态,该对象如下所示:

{
  "CPC": 0,
  "NDP": 0,
  "LPC": 0,
  "GPC": 1,
  "PPC": 2
} 

其中所有键值都是泛型类型<T> 的枚举数。

假设我可以这样调用这个对象:

console.log(this.optionVotes()); 
// Produces:
{  "CPC": 0,   "NDP": 0,   "LPC": 0,   "GPC": 1,   "PPC": 2 } 

我可以从中获得价值 3 的最佳方法是什么?

【问题讨论】:

  • 你的意思是你想要一些json键中的每个值?
  • @SureshPrajapati 你的意思是“总和”每个值吗?
  • @Akiva 是的,请检查答案
  • JSON 表示 JavaScript 对象表示法。在处理 JSON 字符串时,您可以通过 JSON.parse 从中获取原生 JavaScript 对象。
  • 不幸的是,两个答案都遗漏了小细节。它的const data : T 其中T 是一个字符串枚举器。我无法编译我的代码,因为它抱怨类型。

标签: javascript typescript


【解决方案1】:

您可以使用Object.keys()Array.prototype.reduce()

代码:

const data = {  "CPC": 0,   "NDP": 0,   "LPC": 0,   "GPC": 1,   "PPC": 2 };
const result = Object
  .keys(data)
  .reduce((a, key) => a + data[key], 0);

console.log(result);

【讨论】:

  • 我建议同时使用reduce 函数的indexarray 参数。如果您想将其定义为外部函数,这会使重构变得更加容易。
【解决方案2】:

Objec.value(obj) 将在键中返回一个值数组,reduce 将在 reduce 回调中的 var c 计数器中添加每个值。

var foo =  {  "CPC": 0,   "NDP": 0,   "LPC": 0,   "GPC": 1,   "PPC": 2 } 
console.log(Object.values(foo).reduce((a, c) => a + c, 0))

【讨论】:

  • 这不起作用,如果 foo 是泛型类型。
  • @Akiva 你能举个例子或测试用例吗?
猜你喜欢
  • 2019-05-17
  • 1970-01-01
  • 2017-01-04
  • 2021-12-06
  • 2014-06-11
  • 2016-08-30
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多