javascript - 从 JSON 中选择

标签 javascript arrays json selection reduce

我最近开始学习 JavaScript 并面临一项我无法以任何方式完成的任务,每次我得到我需要的错误数据时
有一个包含银行交易数据的对象,我需要使用 过滤器、映射或减少 进行选择并形成一个新对象:
我们假设卡上的初始余额 = 0。

  • 输出每月操作次数最多的 TOP 3 月份。

  • 将其形式化为 task_1(arr) 函数,其中 arr 是包含数据的源数组
    所有月份。
    输出格式:
    [
        { year: 2019, month: 11, opsCount: 27 },
        { year: 2019, month: 10, opsCount: 26 },
        { year: 2019, month: 8, opsCount: 24 }
    ]
    
  • 指定月末的输出统计信息。
  • monthmonthBalance - 按月的自有余额 = 全部金额
    存款减去所有借方的金额
  • montWithdrawal – 提款总额
  • 取款率 – 借方总额占借方总额的比例
    每月存款。
  • rank – 通过公式计算的用户状态:

  • 黄金 如果提款率 < 0.15。
    白银 如果提款率 < 0.3。
    青铜 在所有其他情况下。
    将其形式化为 task_2(year,month,arr) 函数,其中 year,month 是所需的
    月,arr 是原始数组,其中包含所有月份的数据。
    输出格式:
    {
    date: '2019-01-31’,
    monthBalance: 3829,
    monthWithrawal: 33800,
    withdrawalRate: 0.3133
    rank: 'Bronze’
    }
    
  • 计算任务 2 中所有月份的统计数据。
    每个月添加一个字段
  • totalBalance - 累计余额 = 自己的余额
    月 + 上个月累计余额的余额。

  • 输出格式:
    [
    {
    date: '2019-01-31’,
    monthBalance: 3829,
    totalBalance: 3829,
    monthWithrawal: 33800,
    withdrawalRate: 0.3133
    rank: ’Bronze'
    },
    ...
    ]
    
    将其形式化为 task_3(arr) 函数,其中 arr 是包含数据的源数组。
    JSON 与 数据 :

    [
        { "year": 2019, "month": 1, "day": 1, "type": "replenishment", "amount": 79817 },
        { "year": 2019, "month": 1, "day": 3, "type": "payment", "amount": 11334 },
        { "year": 2019, "month": 1, "day": 5, "type": "withdrawal", "amount": 26700 },
        { "year": 2019, "month": 1, "day": 5, "type": "payment", "amount": 15475 },
        { "year": 2019, "month": 1, "day": 6, "type": "payment", "amount": 4818 },
        { "year": 2019, "month": 1, "day": 6, "type": "payment", "amount": 1893 },
        { "year": 2019, "month": 1, "day": 7, "type": "payment", "amount": 3844 },
        { "year": 2019, "month": 1, "day": 7, "type": "withdrawal", "amount": 3100 },
        { "year": 2019, "month": 1, "day": 7, "type": "payment", "amount": 3230 },
        { "year": 2019, "month": 1, "day": 7, "type": "payment", "amount": 2427 },
        { "year": 2019, "month": 1, "day": 9, "type": "replenishment", "amount": 15835 },
        { "year": 2019, "month": 1, "day": 10, "type": "payment", "amount": 9670 },
        { "year": 2019, "month": 1, "day": 11, "type": "payment", "amount": 582 },
        { "year": 2019, "month": 1, "day": 11, "type": "withdrawal", "amount": 1100 },
        { "year": 2019, "month": 1, "day": 11, "type": "replenishment", "amount": 5971 },
        { "year": 2019, "month": 1, "day": 12, "type": "payment", "amount": 173 },
        { "year": 2019, "month": 1, "day": 14, "type": "withdrawal", "amount": 1500 },
        { "year": 2019, "month": 1, "day": 14, "type": "payment", "amount": 3641 },
        { "year": 2019, "month": 1, "day": 16, "type": "payment", "amount": 4669 },
        { "year": 2019, "month": 1, "day": 18, "type": "payment", "amount": 2460 },
        { "year": 2019, "month": 1, "day": 19, "type": "payment", "amount": 1307 },
        { "year": 2019, "month": 1, "day": 20, "type": "withdrawal", "amount": 1400 },
        { "year": 2019, "month": 1, "day": 21, "type": "payment", "amount": 952 },
        { "year": 2019, "month": 1, "day": 21, "type": "payment", "amount": 561 },
        { "year": 2019, "month": 1, "day": 21, "type": "replenishment", "amount": 6236 },
        { "year": 2019, "month": 1, "day": 22, "type": "payment", "amount": 888 },
        { "year": 2019, "month": 1, "day": 22, "type": "payment", "amount": 2306 },
        { "year": 2019, "month": 2, "day": 1, "type": "replenishment", "amount": 84839 },
        { "year": 2019, "month": 2, "day": 1, "type": "withdrawal", "amount": 27700 },
        { "year": 2019, "month": 2, "day": 1, "type": "payment", "amount": 11145 },
        { "year": 2019, "month": 2, "day": 2, "type": "payment", "amount": 4075 },
        { "year": 2019, "month": 2, "day": 4, "type": "withdrawal", "amount": 10900 },
        { "year": 2019, "month": 2, "day": 6, "type": "payment", "amount": 10537 },
        { "year": 2019, "month": 2, "day": 6, "type": "payment", "amount": 6001 },
        { "year": 2019, "month": 2, "day": 7, "type": "withdrawal", "amount": 7300 },
        { "year": 2019, "month": 2, "day": 10, "type": "withdrawal", "amount": 1500 },
        { "year": 2019, "month": 2, "day": 10, "type": "payment", "amount": 3584 },
        { "year": 2019, "month": 2, "day": 11, "type": "payment", "amount": 701 },
        { "year": 2019, "month": 3, "day": 1, "type": "replenishment", "amount": 84771 },
        { "year": 2019, "month": 3, "day": 3, "type": "withdrawal", "amount": 22700 },
        { "year": 2019, "month": 3, "day": 5, "type": "payment", "amount": 12352 },
        { "year": 2019, "month": 3, "day": 8, "type": "payment", "amount": 2795 },
        { "year": 2019, "month": 3, "day": 11, "type": "withdrawal", "amount": 16600 },
        { "year": 2019, "month": 3, "day": 11, "type": "replenishment", "amount": 4141 },
        { "year": 2019, "month": 3, "day": 11, "type": "payment", "amount": 9854 },
        { "year": 2019, "month": 3, "day": 13, "type": "withdrawal", "amount": 1200 },
        { "year": 2019, "month": 3, "day": 14, "type": "payment", "amount": 11573 },
        { "year": 2019, "month": 3, "day": 14, "type": "payment", "amount": 5138 },
        { "year": 2019, "month": 3, "day": 15, "type": "payment", "amount": 731 },
        { "year": 2019, "month": 3, "day": 17, "type": "payment", "amount": 5053 },
        { "year": 2019, "month": 3, "day": 19, "type": "withdrawal", "amount": 400 },
        { "year": 2019, "month": 3, "day": 20, "type": "payment", "amount": 1745 },
        { "year": 2019, "month": 3, "day": 20, "type": "payment", "amount": 602 },
        { "year": 2019, "month": 3, "day": 21, "type": "payment", "amount": 178 },
        { "year": 2019, "month": 3, "day": 22, "type": "payment", "amount": 353 },
        { "year": 2019, "month": 3, "day": 23, "type": "payment", "amount": 837 },
        { "year": 2019, "month": 3, "day": 23, "type": "payment", "amount": 330 },
        { "year": 2019, "month": 3, "day": 23, "type": "payment", "amount": 799 },
        { "year": 2019, "month": 3, "day": 24, "type": "payment", "amount": 294 },
        { "year": 2019, "month": 3, "day": 24, "type": "payment", "amount": 260 },
        { "year": 2019, "month": 3, "day": 25, "type": "withdrawal", "amount": 200 },
        { "year": 2019, "month": 4, "day": 1, "type": "replenishment", "amount": 88656 },
        { "year": 2019, "month": 4, "day": 4, "type": "payment", "amount": 37852 },
        { "year": 2019, "month": 4, "day": 7, "type": "payment", "amount": 9365 },
        { "year": 2019, "month": 4, "day": 8, "type": "payment", "amount": 16701 },
        { "year": 2019, "month": 4, "day": 11, "type": "payment", "amount": 8979 },
        { "year": 2019, "month": 4, "day": 11, "type": "payment", "amount": 1971 },
        { "year": 2019, "month": 4, "day": 13, "type": "payment", "amount": 1261 },
        { "year": 2019, "month": 4, "day": 13, "type": "withdrawal", "amount": 800 },
        { "year": 2019, "month": 4, "day": 15, "type": "payment", "amount": 5553 },
        { "year": 2019, "month": 4, "day": 17, "type": "payment", "amount": 2593 },
        { "year": 2019, "month": 4, "day": 18, "type": "replenishment", "amount": 6915 },
        { "year": 2019, "month": 4, "day": 19, "type": "replenishment", "amount": 17647 },
        { "year": 2019, "month": 4, "day": 21, "type": "payment", "amount": 13814 },
        { "year": 2019, "month": 4, "day": 22, "type": "payment", "amount": 2707 },
        { "year": 2019, "month": 4, "day": 22, "type": "withdrawal", "amount": 1300 },
        { "year": 2019, "month": 4, "day": 22, "type": "withdrawal", "amount": 2900 },
        { "year": 2019, "month": 4, "day": 23, "type": "replenishment", "amount": 10709 },
        { "year": 2019, "month": 4, "day": 23, "type": "payment", "amount": 686 },
        { "year": 2019, "month": 4, "day": 23, "type": "withdrawal", "amount": 5100 },
        { "year": 2019, "month": 4, "day": 23, "type": "payment", "amount": 3830 },
        { "year": 2019, "month": 5, "day": 1, "type": "replenishment", "amount": 59877 },
        { "year": 2019, "month": 5, "day": 2, "type": "payment", "amount": 14095 },
        { "year": 2019, "month": 5, "day": 5, "type": "payment", "amount": 10858 },
        { "year": 2019, "month": 5, "day": 8, "type": "payment", "amount": 9412 },
        { "year": 2019, "month": 5, "day": 11, "type": "replenishment", "amount": 6892 },
        { "year": 2019, "month": 5, "day": 11, "type": "payment", "amount": 17541 },
        { "year": 2019, "month": 5, "day": 11, "type": "payment", "amount": 2666 },
        { "year": 2019, "month": 5, "day": 11, "type": "payment", "amount": 3935 },
        { "year": 2019, "month": 5, "day": 12, "type": "withdrawal", "amount": 2600 },
        { "year": 2019, "month": 5, "day": 14, "type": "payment", "amount": 2096 },
        { "year": 2019, "month": 5, "day": 14, "type": "replenishment", "amount": 2733 },
        { "year": 2019, "month": 5, "day": 15, "type": "replenishment", "amount": 538 },
        { "year": 2019, "month": 5, "day": 15, "type": "payment", "amount": 5324 },
        { "year": 2019, "month": 5, "day": 15, "type": "payment", "amount": 2490 },
        { "year": 2019, "month": 5, "day": 15, "type": "payment", "amount": 3510 },
        { "year": 2019, "month": 5, "day": 17, "type": "withdrawal", "amount": 300 },
        { "year": 2019, "month": 5, "day": 17, "type": "payment", "amount": 133 },
        { "year": 2019, "month": 6, "day": 1, "type": "replenishment", "amount": 89064 },
        { "year": 2019, "month": 6, "day": 2, "type": "payment", "amount": 7613 },
        { "year": 2019, "month": 6, "day": 2, "type": "payment", "amount": 33742 },
        { "year": 2019, "month": 6, "day": 5, "type": "withdrawal", "amount": 7200 },
        { "year": 2019, "month": 6, "day": 6, "type": "payment", "amount": 15125 },
        { "year": 2019, "month": 6, "day": 9, "type": "payment", "amount": 3379 },
        { "year": 2019, "month": 6, "day": 10, "type": "payment", "amount": 1260 },
        { "year": 2019, "month": 6, "day": 12, "type": "payment", "amount": 11066 },
        { "year": 2019, "month": 6, "day": 12, "type": "replenishment", "amount": 7050 },
        { "year": 2019, "month": 6, "day": 12, "type": "payment", "amount": 7531 },
        { "year": 2019, "month": 6, "day": 13, "type": "payment", "amount": 4776 },
        { "year": 2019, "month": 6, "day": 13, "type": "replenishment", "amount": 4456 },
        { "year": 2019, "month": 6, "day": 14, "type": "replenishment", "amount": 7998 },
        { "year": 2019, "month": 6, "day": 16, "type": "payment", "amount": 2437 },
        { "year": 2019, "month": 6, "day": 16, "type": "replenishment", "amount": 11729 },
        { "year": 2019, "month": 6, "day": 18, "type": "payment", "amount": 11216 },
        { "year": 2019, "month": 6, "day": 19, "type": "payment", "amount": 3420 },
        { "year": 2019, "month": 6, "day": 19, "type": "payment", "amount": 1339 },
        { "year": 2019, "month": 6, "day": 20, "type": "payment", "amount": 5578 },
        { "year": 2019, "month": 6, "day": 21, "type": "withdrawal", "amount": 1600 },
        { "year": 2019, "month": 6, "day": 21, "type": "withdrawal", "amount": 400 },
        { "year": 2019, "month": 7, "day": 1, "type": "replenishment", "amount": 51749 },
        { "year": 2019, "month": 7, "day": 2, "type": "payment", "amount": 2875 },
        { "year": 2019, "month": 7, "day": 2, "type": "payment", "amount": 10315 },
        { "year": 2019, "month": 7, "day": 5, "type": "payment", "amount": 18501 },
        { "year": 2019, "month": 7, "day": 5, "type": "payment", "amount": 12728 },
        { "year": 2019, "month": 7, "day": 7, "type": "payment", "amount": 4505 },
        { "year": 2019, "month": 7, "day": 8, "type": "payment", "amount": 2758 },
        { "year": 2019, "month": 7, "day": 8, "type": "payment", "amount": 60 },
        { "year": 2019, "month": 7, "day": 10, "type": "withdrawal", "amount": 1100 },
        { "year": 2019, "month": 7, "day": 12, "type": "withdrawal", "amount": 1000 },
        { "year": 2019, "month": 7, "day": 13, "type": "payment", "amount": 151 },
        { "year": 2019, "month": 8, "day": 1, "type": "replenishment", "amount": 85156 },
        { "year": 2019, "month": 8, "day": 1, "type": "payment", "amount": 33978 },
        { "year": 2019, "month": 8, "day": 2, "type": "payment", "amount": 6548 },
        { "year": 2019, "month": 8, "day": 3, "type": "payment", "amount": 5909 },
        { "year": 2019, "month": 8, "day": 6, "type": "payment", "amount": 2326 },
        { "year": 2019, "month": 8, "day": 6, "type": "payment", "amount": 17798 },
        { "year": 2019, "month": 8, "day": 9, "type": "replenishment", "amount": 10770 },
        { "year": 2019, "month": 8, "day": 10, "type": "withdrawal", "amount": 7400 },
        { "year": 2019, "month": 8, "day": 12, "type": "payment", "amount": 6065 },
        { "year": 2019, "month": 8, "day": 14, "type": "withdrawal", "amount": 900 },
        { "year": 2019, "month": 8, "day": 14, "type": "withdrawal", "amount": 1400 },
        { "year": 2019, "month": 8, "day": 14, "type": "payment", "amount": 4673 },
        { "year": 2019, "month": 8, "day": 15, "type": "payment", "amount": 960 },
        { "year": 2019, "month": 8, "day": 15, "type": "payment", "amount": 1085 },
        { "year": 2019, "month": 8, "day": 17, "type": "payment", "amount": 3723 },
        { "year": 2019, "month": 8, "day": 17, "type": "payment", "amount": 2522 },
        { "year": 2019, "month": 8, "day": 19, "type": "replenishment", "amount": 2496 },
        { "year": 2019, "month": 8, "day": 20, "type": "payment", "amount": 876 },
        { "year": 2019, "month": 8, "day": 20, "type": "payment", "amount": 2504 },
        { "year": 2019, "month": 8, "day": 21, "type": "payment", "amount": 826 },
        { "year": 2019, "month": 8, "day": 22, "type": "payment", "amount": 768 },
        { "year": 2019, "month": 8, "day": 23, "type": "withdrawal", "amount": 700 },
        { "year": 2019, "month": 8, "day": 23, "type": "payment", "amount": 190 },
        { "year": 2019, "month": 8, "day": 24, "type": "payment", "amount": 235 },
        { "year": 2019, "month": 9, "day": 1, "type": "replenishment", "amount": 95512 },
        { "year": 2019, "month": 9, "day": 3, "type": "payment", "amount": 26758 },
        { "year": 2019, "month": 9, "day": 3, "type": "replenishment", "amount": 8377 },
        { "year": 2019, "month": 9, "day": 4, "type": "payment", "amount": 30865 },
        { "year": 2019, "month": 9, "day": 4, "type": "withdrawal", "amount": 12800 },
        { "year": 2019, "month": 9, "day": 7, "type": "payment", "amount": 10518 },
        { "year": 2019, "month": 9, "day": 8, "type": "payment", "amount": 11007 },
        { "year": 2019, "month": 9, "day": 10, "type": "payment", "amount": 5613 },
        { "year": 2019, "month": 9, "day": 10, "type": "withdrawal", "amount": 1700 },
        { "year": 2019, "month": 9, "day": 12, "type": "payment", "amount": 2237 },
        { "year": 2019, "month": 9, "day": 14, "type": "payment", "amount": 885 },
        { "year": 2019, "month": 9, "day": 14, "type": "payment", "amount": 977 },
        { "year": 2019, "month": 9, "day": 15, "type": "payment", "amount": 766 },
        { "year": 2019, "month": 9, "day": 17, "type": "payment", "amount": 360 },
        { "year": 2019, "month": 9, "day": 18, "type": "payment", "amount": 116 },
        { "year": 2019, "month": 9, "day": 18, "type": "withdrawal", "amount": 200 },
        { "year": 2019, "month": 9, "day": 19, "type": "payment", "amount": 115 },
        { "year": 2019, "month": 9, "day": 20, "type": "payment", "amount": 50 },
        { "year": 2019, "month": 9, "day": 21, "type": "payment", "amount": 32 },
        { "year": 2019, "month": 10, "day": 1, "type": "replenishment", "amount": 90475 },
        { "year": 2019, "month": 10, "day": 1, "type": "replenishment", "amount": 8845 },
        { "year": 2019, "month": 10, "day": 2, "type": "payment", "amount": 7121 },
        { "year": 2019, "month": 10, "day": 3, "type": "payment", "amount": 27955 },
        { "year": 2019, "month": 10, "day": 3, "type": "payment", "amount": 23079 },
        { "year": 2019, "month": 10, "day": 4, "type": "payment", "amount": 5948 },
        { "year": 2019, "month": 10, "day": 7, "type": "withdrawal", "amount": 4400 },
        { "year": 2019, "month": 10, "day": 8, "type": "payment", "amount": 9677 },
        { "year": 2019, "month": 10, "day": 9, "type": "payment", "amount": 3912 },
        { "year": 2019, "month": 10, "day": 9, "type": "replenishment", "amount": 3870 },
        { "year": 2019, "month": 10, "day": 9, "type": "payment", "amount": 6949 },
        { "year": 2019, "month": 10, "day": 10, "type": "withdrawal", "amount": 3400 },
        { "year": 2019, "month": 10, "day": 10, "type": "replenishment", "amount": 7471 },
        { "year": 2019, "month": 10, "day": 10, "type": "payment", "amount": 5962 },
        { "year": 2019, "month": 10, "day": 10, "type": "payment", "amount": 4990 },
        { "year": 2019, "month": 10, "day": 10, "type": "withdrawal", "amount": 3000 },
        { "year": 2019, "month": 10, "day": 11, "type": "withdrawal", "amount": 200 },
        { "year": 2019, "month": 10, "day": 12, "type": "withdrawal", "amount": 1300 },
        { "year": 2019, "month": 10, "day": 13, "type": "payment", "amount": 986 },
        { "year": 2019, "month": 10, "day": 14, "type": "replenishment", "amount": 4225 },
        { "year": 2019, "month": 10, "day": 15, "type": "withdrawal", "amount": 900 },
        { "year": 2019, "month": 10, "day": 17, "type": "payment", "amount": 864 },
        { "year": 2019, "month": 10, "day": 17, "type": "withdrawal", "amount": 1000 },
        { "year": 2019, "month": 10, "day": 18, "type": "payment", "amount": 801 },
        { "year": 2019, "month": 10, "day": 19, "type": "withdrawal", "amount": 300 },
        { "year": 2019, "month": 10, "day": 20, "type": "payment", "amount": 530 },
        { "year": 2019, "month": 11, "day": 1, "type": "replenishment", "amount": 80285 },
        { "year": 2019, "month": 11, "day": 3, "type": "payment", "amount": 38155 },
        { "year": 2019, "month": 11, "day": 6, "type": "payment", "amount": 10260 },
        { "year": 2019, "month": 11, "day": 9, "type": "payment", "amount": 11013 },
        { "year": 2019, "month": 11, "day": 10, "type": "payment", "amount": 1232 },
        { "year": 2019, "month": 11, "day": 12, "type": "withdrawal", "amount": 5100 },
        { "year": 2019, "month": 11, "day": 12, "type": "payment", "amount": 1192 },
        { "year": 2019, "month": 11, "day": 13, "type": "withdrawal", "amount": 4500 },
        { "year": 2019, "month": 11, "day": 14, "type": "replenishment", "amount": 4304 },
        { "year": 2019, "month": 11, "day": 15, "type": "withdrawal", "amount": 700 },
        { "year": 2019, "month": 11, "day": 15, "type": "replenishment", "amount": 15857 },
        { "year": 2019, "month": 11, "day": 17, "type": "payment", "amount": 9134 },
        { "year": 2019, "month": 11, "day": 19, "type": "payment", "amount": 8090 },
        { "year": 2019, "month": 11, "day": 20, "type": "payment", "amount": 2117 },
        { "year": 2019, "month": 11, "day": 20, "type": "withdrawal", "amount": 2700 },
        { "year": 2019, "month": 11, "day": 21, "type": "withdrawal", "amount": 2200 },
        { "year": 2019, "month": 11, "day": 21, "type": "payment", "amount": 258 },
        { "year": 2019, "month": 11, "day": 21, "type": "withdrawal", "amount": 1200 },
        { "year": 2019, "month": 11, "day": 21, "type": "payment", "amount": 1966 },
        { "year": 2019, "month": 11, "day": 21, "type": "withdrawal", "amount": 200 },
        { "year": 2019, "month": 11, "day": 21, "type": "payment", "amount": 493 },
        { "year": 2019, "month": 11, "day": 21, "type": "payment", "amount": 396 },
        { "year": 2019, "month": 11, "day": 21, "type": "withdrawal", "amount": 200 },
        { "year": 2019, "month": 11, "day": 21, "type": "payment", "amount": 134 },
        { "year": 2019, "month": 11, "day": 22, "type": "replenishment", "amount": 4815 },
        { "year": 2019, "month": 11, "day": 22, "type": "withdrawal", "amount": 500 },
        { "year": 2019, "month": 11, "day": 23, "type": "payment", "amount": 1793 },
        { "year": 2019, "month": 12, "day": 1, "type": "replenishment", "amount": 93524 },
        { "year": 2019, "month": 12, "day": 2, "type": "payment", "amount": 44289 },
        { "year": 2019, "month": 12, "day": 2, "type": "payment", "amount": 7724 },
        { "year": 2019, "month": 12, "day": 4, "type": "payment", "amount": 9420 },
        { "year": 2019, "month": 12, "day": 4, "type": "withdrawal", "amount": 3200 },
        { "year": 2019, "month": 12, "day": 4, "type": "payment", "amount": 651 },
        { "year": 2019, "month": 12, "day": 6, "type": "payment", "amount": 9259 },
        { "year": 2019, "month": 12, "day": 6, "type": "withdrawal", "amount": 5700 },
        { "year": 2019, "month": 12, "day": 7, "type": "payment", "amount": 1298 },
        { "year": 2019, "month": 12, "day": 9, "type": "payment", "amount": 3108 },
        { "year": 2019, "month": 12, "day": 11, "type": "withdrawal", "amount": 4300 },
        { "year": 2019, "month": 12, "day": 13, "type": "withdrawal", "amount": 200 },
        { "year": 2019, "month": 12, "day": 13, "type": "replenishment", "amount": 9096 },
        { "year": 2019, "month": 12, "day": 14, "type": "payment", "amount": 7205 },
        { "year": 2019, "month": 12, "day": 16, "type": "payment", "amount": 658 },
        { "year": 2019, "month": 12, "day": 17, "type": "replenishment", "amount": 9654 }
    ]

    首先,对于 task_1,我得到一个对象,其中包含键“月”的值:
    var arr1 = ops.map(function(item){
    
    return item.month
    
    })
    
    然后我在结果数组中找到唯一值的总和:
    quantity var = {};
    for (var i = 0; i <arr1.length; i++){
    quantity [arr1[i]] = 1 + (quantity [arr1[i]]|/ 0);
    }
    
    我得到以下形式的计数对象:
    counts
    {1: 27, 2: 11, 3: 23, 4: 20, 5: 17, 6: 21, 7: 11, 8: 24, 9: 19, 10: 26, 11: 27, 12: 16}
    
    之后,我排序找到 3 个最大值:
    function findMax 3(obj){
    var res = [-1,-1,-1];
    
    for (let key in obj){
    res[3] = obj[key];
    res.sort(function(a,b){return b-a});
    }
    res.pop();
    return res;
    }
    
    
    console.log(findMax3(counts));
    
    在控制台中,我得到以下信息:
    [27, 27, 26]
    
    但与此同时,我不再知道与这些值相关的月份的索引
    谢谢您的回答!

    最佳答案

    为了解决这些问题,这里有提示 "GroupBy using reduce"
    至于任务1

    function task_1(arr) {
        // Dictionary of Month to Object.
        const groupedByMonth = arr.reduce(function (acc, currentValue) {
            let groupKey = currentValue.month;
            if (!acc[groupKey]) {
                acc[groupKey] = {
                    year: currentValue.year,
                    month: currentValue.month,
                    opsCount: 0
                };
            }
            acc[groupKey].opsCount += 1; // ++
            return acc;
        }, {});
    
        // Sort by opsCount
        function opsSort(a, b) { return b.opsCount - a.opsCount };
    
        return Object
            .values(groupedByMonth) // Array of Values
            .sort(opsSort)
            .slice(0, 3) // Top 3
    }
    
    一旦你了解了任务 1 是如何解决的,任务 2 就会变得简单一些
    任务 2 的解决方案
    function getEndOfMonth(year, month) {
        const date = new Date(year, month, 0);
        let monthStr = "";
        if (month < 10) {
            monthStr += "0";
        }
        monthStr += month;
    
        return year + "-" + monthStr + "-" + date.getDate();
    }
    
    function getRank(rate) {
        if (rate < 0.15)
            return 'Gold';
        if (rate < 0.3)
            return 'Gold';
        return 'Bronze';
    }
    
    
    function task_2(arr) {
        const groupedByMonth = arr.reduce(function (acc, currentValue) {
            let groupKey = currentValue.month;
            if (!acc[groupKey]) {
                acc[groupKey] = {
                    date: getEndOfMonth(currentValue.year, currentValue.month),
                    monthWithrawal: 0,
                    totalDebits: 0,
                    totalDeposits: 0
                };
            }
    
            // Based on type calculate value.
            if (currentValue.type === "replenishment") {
                acc[groupKey].totalDeposits += currentValue.amount;
            } else if (currentValue.type === "payment") {
                acc[groupKey].totalDebits += currentValue.amount;
            } else if (currentValue.type === "withdrawal") {
                acc[groupKey].monthWithrawal += currentValue.amount;
            }
    
            return acc;
        }, {});
    
        return Object
            .values(groupedByMonth) // Array of Values
            .map(function (ele) {
                const withdrawalRate = ele.monthWithrawal / ele.totalDeposits;
                return {
                    date: ele.date,
                    monthBalance: ele.totalDeposits - ele.totalDebits - ele.monthWithrawal,
                    monthWithrawal: ele.monthWithrawal,
                    withdrawalRate,
                    rank: getRank(withdrawalRate)
                };
            });
    }
    
    如果您已经解决了任务 2,那么任务 3 只是将 reduce/map 添加到任务 2 的解决方案中。
    function task_3(arr) {
        // Assuming that task_2 function is defined.
        const task2 = task_2(arr);
    
        // Can be Solved using reduce.
        return task2
            .map(function (currentValue, index, array) {
                const tmp = currentValue;
                tmp.totalBalance = tmp.monthBalance;
                if (index > 0) { // Not the first element.
                    tmp.totalBalance += array[index - 1].totalBalance;
                }
                return tmp;
            })
    }
    

    关于javascript - 从 JSON 中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69732428/

    相关文章:

    javascript - 动态将表数据转换为树数据JSON格式(父,子)d3.js?

    javascript - 基于 Three.js 中新枢轴的对象动画旋转

    python - 如何在 Python 中实现循环缓冲区?

    Java - 无法提取数组中的最小值

    javascript - 使用 AJAX/Fullcalendar 事件 JSON 从 .NET 文件夹中提取 JSON 文件

    Python - 从串行端口读取并编码为 JSON

    iphone - 用希伯来语将 JSON 从 iPhone 发送到 IIS,字符串在结尾前被剪切

    javascript - 如何在angularjs的递归指令中使用全局函数

    javascript - 如何在查询中获取查询对象?

    c - 灵活数组成员(零长度数组)