首页 > 解决方案 > 根据属性将对象数组过滤为多个对象数组

问题描述

目前,我有一个对象数组

const bankData = [
    {
      "bank": "Chase",
      "monthEndBalance": "72,175.88",
      "bankStatementDate": "2020/10/31"
    },
    {
      "bank": "Chase",
      "monthEndBalance": "93,412.79",
      "bankStatementDate": "2020/07/31"
    },
    {
      "bank": "Chase",
      "monthEndBalance": "88,175.88",
      "bankStatementDate": "2020/11/30"
    },
    {
      "bank": "Chase",
      "monthEndBalance": "102,200.12",
      "bankStatementDate": "2020/12/31"
    },
    {
      "bank": "Goldman Sachs",
      "monthEndBalance": "72,276.12",
      "bankStatementDate": "2020/11/30"
    },
    {
      "bank": "Goldman Sachs",
      "monthEndBalance": "52,276.12",
      "bankStatementDate": "2020/10/31"
    },
    {
      "bank": "Goldman Sachs",
      "monthEndBalance": "102,276.12",
      "bankStatementDate": "2020/12/31"
    },
    {
      "bank": "Wells Fargo",
      "monthEndBalance": "33,276.12",
      "bankStatementDate": "2020/11/30"
    },
    {
      "bank": "Wells Fargo",
      "monthEndBalance": "12,276.12",
      "bankStatementDate": "2020/10/31"
    },
    {
      "bank": "Wells Fargo",
      "monthEndBalance": "150,276.12",
      "bankStatementDate": "2020/12/31"
    }
]

我正在寻找所需的输出,其中每个银行都将被过滤到它自己的对象数组中。

例如


const bankOne = [
    {
      "bank": "Chase",
      "monthEndBalance": "72,175.88",
      "bankStatementDate": "2020/10/31"
    },
    {
      "bank": "Chase",
      "monthEndBalance": "93,412.79",
      "bankStatementDate": "2020/07/31"
    },
    {
      "bank": "Chase",
      "monthEndBalance": "88,175.88",
      "bankStatementDate": "2020/11/30"
    },
    {
      "bank": "Chase",
      "monthEndBalance": "102,200.12",
      "bankStatementDate": "2020/12/31"
    }
]

我有一个基本的实现,Array.filter但是随着更多银行的添加,它不可扩展,并且每个新银行都需要更改代码,能够将每个银行过滤成自己独特的对象数组的理想方法是什么?

const chaseBank = bankData.filter(el => el.bank === "Chase")
const goldManBank = bankData.filter(el => el.bank === "Goldman Sachs")
const wellsFargoBank = bankData.filter(el => el.bank === "Wells Fargo")

标签: javascriptarraystypescriptfiltering

解决方案


你可以拿一个对象进行分组。

const
    data = [{ bank: "Chase", monthEndBalance: "72,175.88", bankStatementDate: "2020/10/31" }, { bank: "Chase", monthEndBalance: "93,412.79", bankStatementDate: "2020/07/31" }, { bank: "Chase", monthEndBalance: "88,175.88", bankStatementDate: "2020/11/30" }, { bank: "Chase", monthEndBalance: "102,200.12", bankStatementDate: "2020/12/31" }, { bank: "Goldman Sachs", monthEndBalance: "72,276.12", bankStatementDate: "2020/11/30" }, { bank: "Goldman Sachs", monthEndBalance: "52,276.12", bankStatementDate: "2020/10/31" }, { bank: "Goldman Sachs", monthEndBalance: "102,276.12", bankStatementDate: "2020/12/31" }, { bank: "Wells Fargo", monthEndBalance: "33,276.12", bankStatementDate: "2020/11/30" }, { bank: "Wells Fargo", monthEndBalance: "12,276.12", bankStatementDate: "2020/10/31" }, { bank: "Wells Fargo", monthEndBalance: "150,276.12", bankStatementDate: "2020/12/31" }],
    result = data.reduce((r, o) => {
        (r[o.bank] ??= []).push(o);
        return r;
    }, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读