在 JS 中查找累加器的属性

用户7319004

我正在运行这个累加器,它工作得很好,但我发现在同一个对象中添加一些属性具有挑战性:

  let expenseCategories = expenseObj.reduce((acc, obj) => {
    let category = obj['category'];
    // let amount = obj['amount'];
    if (category in acc) {
      acc[category] += 1;
    } else {
      acc[category] = 1;
    }
    return acc;
  }, {});

{交通:2,食物:1,衣服:1,账单:2,乐趣:1,……}

我的初始对象还包含交易金额

{amount: 10, category: "Transportation", date: 20190510, expense: true, ...
{amount: 20, category: "Drinks", date: 20190510, expense: true, ...
{amount: 30, category: "Bills", date: 20190510, expense: true, ...
{amount: 40, category: "Bills", date: 20190510, expense: true, ...

我的目标是计算每个类别的总和,bills如上例所示,为 70。

我希望添加此信息以显示一些图表,预期的数组如下所示:

0: {name: "Transportation", value: 2, total: 123}
1: {name: "Food", value: 1, total: 456}
2: {name: "Clothes", value: 1, total: 789}

这是我对我已有的正确数据的尝试:

let outExpense = Object.entries(expenseCategories).map(([name, value]) => ({ name, value }));

这应该是动态的,因为在运行代码之前我不知道类别。这些是用户输入。请指教。谢谢

您正在计算每个 的出现次数category你需要稍微改变你的实现。您可以在输出数组中创建您需要的对象作为值,而不是创建一个数字作为值。然后,只需Object.values()在累加器对象上使用即可获取分组值数组

const expenseObj = [{amount: 10, category: "Transportation", date: 20190510, expense: true},
{amount: 20, category: "Drinks", date: 20190510, expense: true},
{amount: 30, category: "Bills", date: 20190510, expense: true},
{amount: 40, category: "Bills", date: 20190510, expense: true}]

let groupCategories = expenseObj.reduce((acc, obj) => {
  let { category, amount } = obj;
  
  if (category in acc) {
    acc[category].value++;    
    acc[category].total += amount;
  } else {
    acc[category] = { name: category, value: 1, total: amount };
  }
  return acc;
}, {});

console.log(Object.values(groupCategories))

这就是累加器在更改后的样子。如果当前对象category已存在于累加器中,则增加valuetotal否则,添加categoryas 键和一个新对象作为它的值

{
  "Transportation": {
    "name": "Transportation",
    "value": 1,
    "total": 10
  },
  "Drinks": {
    "name": "Drinks",
    "value": 1,
    "total": 20
  },
  "Bills": {
    "name": "Bills",
    "value": 2,
    "total": 70
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列表累加器在Erlang

来自分类Dev

展开返回累加器的最后状态

来自分类Dev

使用Clojure中的累加器进行映射?

来自分类Dev

如何实现timespec累加器?

来自分类Dev

使用累加器的树的大小

来自分类Dev

用累加器遍历jQuery对象?

来自分类Dev

使用累加器遍历Node.js异步目录

来自分类Dev

Prolog使用累加器在列表中查找元素

来自分类Dev

累加器是线程安全的吗?

来自分类Dev

球拍累加器列表功能

来自分类Dev

可重置的累加器行为?

来自分类Dev

pyspark矩阵累加器

来自分类Dev

功能编程中是否有“折断”或“用累加器查找”的概念?

来自分类Dev

在序言中与累加器反向-错误

来自分类Dev

升压累加器示例无法编译

来自分类Dev

在分机上使用累加器

来自分类Dev

保存累加器的每个迭代?

来自分类Dev

累加器在使`reduce`方法中返回未定义

来自分类Dev

JS reduce:对象累加器标题

来自分类Dev

在F#中,如何正确使用ResizeArray()和Array.map中的累加器来更改记录的属性

来自分类Dev

列表累加器在Erlang

来自分类Dev

使用Clojure中的累加器进行映射?

来自分类Dev

使用累加器遍历Node.js异步目录

来自分类Dev

该程序在累加器中缺少什么步骤?

来自分类Dev

如何正确处理Python时钟中的累加器?

来自分类Dev

Erlang导致累加器

来自分类Dev

Bacon.js累加器

来自分类Dev

Scala 中带累加器的辅助方法

来自分类Dev

XSLT 3 中的条件流累加器