【问题标题】:Append values into array of objects based on some condition?根据某些条件将值附加到对象数组中?
【发布时间】:2020-12-04 05:45:27
【问题描述】:

我有一个这样的对象数组

[
  {
    "monthlyData": [
      {
        "dateYear": "2020-07",
        "data": [
          {
            "id": "45bf4792-c5a5-44ed-b7e8-57557c4f30ee",
            "date": "2020-07-13T00:00:00.000Z",
            "transactionId": "160",
            "amount": 70,
            "active": 1,
            "createdAt": "2020-07-14T02:55:43.988Z",
            "updatedAt": "2020-08-14T02:55:43.988Z",
            "version": 1
          }
        ]
      }
    ],
    "hashId": "4"
  },
  {
    "monthlyData": [
      {
        "dateYear": "2020-08",
        "data": [
          {
            "id": "38fe3c68-e6aa-4c57-b4d7-dc6c4f597269",
            "date": "2020-08-13T00:00:00.000Z",
            "transactionId": "146",
            "active": 1,
            "createdAt": "2020-08-14T02:55:43.988Z",
            "updatedAt": "2020-08-14T02:55:43.988Z",
            "version": 1
          }
        ]
      }
    ],
    "hashId": "5"
  }
]

我有一个包含月份列表的数组

let datesArr = ['2020-08','2020-07','2020-06','2020-05','2020-04','2020-04','2020-03','2020-02','2020-01','2019-12']

现在我正在从原始数组中删除那些 date (on dateYear key) 与 datesArr 中指定的任何日期不匹配的项目。

let filtered = mainArray.filter(value => {
    value.monthlyData = value.monthlyData.filter(md => {
        return datesArr.includes(md.dateYear);
    })
    return value.monthlyData.length > 0;
})

现在例如,对于原始数组的一个元素,如果原始数组元素的日期与任何日期都不匹配,那么我想将这些日期插入原始数组元素中,数据键为空。

编辑:

假设我在monthlyData 数组中只有一个元素为 2018-07 并且 hashId 平行于 7 现在该日期在 datesArr 中不存在,因此应从monthlyData 数组中删除该元素,但monthlyData 数组中的日期确实与 datesArr 不匹配应插入到monthlyData 中,数据键为空

每个 hashId 可以有很多个月的数据,这就是为什么monthlyData 是一个数组。

【问题讨论】:

  • 为什么你的“monthlyData”是一个数组?它应该只是一个对象
  • “现在举例”:如果这是一个例子,你能说明一下一般规则吗?如果一个原始日期不匹配,但另一个原始日期确实匹配,您是否还希望添加日期?或者如果原始日期都匹配,但没有“覆盖”所有可能的日期怎么办? ...等
  • 您应该更多地突出您的问题。如您所见,已经发布了两个答案,这错过了您真正要求的内容。
  • 假设我在monthlyData 数组中只有一个元素为2018-07 并且hashId 平行于7 现在这个日期在datesArr 中不存在所以这个元素应该从monthlyData 数组中删除,但是monthlyData 数组中的日期与 datesArr 不匹配应插入到monthlyData 中,数据键为空
  • 这确实不能回答monthlyData数组有多个条目的情况。请参阅我描述的场景。请根据您的期望回答每个问题。

标签: javascript node.js arrays lodash


【解决方案1】:

使用过滤器和一些方法

const arr = [{
    "monthlyData": [{
      "dateYear": "2020-07",
      "data": [{
        "id": "45bf4792-c5a5-44ed-b7e8-57557c4f30ee",
        "date": "2020-07-13T00:00:00.000Z",
        "transactionId": "160",
        "amount": 70,
        "active": 1,
        "createdAt": "2020-07-14T02:55:43.988Z",
        "updatedAt": "2020-08-14T02:55:43.988Z",
        "version": 1
      }]
    }],
    "hashId": "4"
  },
  {
    "monthlyData": [{
      "dateYear": "20222-08",
      "data": [{
        "id": "38fe3c68-e6aa-4c57-b4d7-dc6c4f597269",
        "date": "2020-08-13T00:00:00.000Z",
        "transactionId": "146",
        "active": 1,
        "createdAt": "2020-08-14T02:55:43.988Z",
        "updatedAt": "2020-08-14T02:55:43.988Z",
        "version": 1
      }]
    }],
    "hashId": "5"
  }
]

let datesArr = ['2020-08', '2020-07', '2020-06', '2020-05', '2020-04', '2020-04', '2020-03', '2020-02', '2020-01', '2019-12'];


let result = arr.filter(x => x["monthlyData"].some(y => !datesArr.some(z => z === y.dateYear)))
console.log(result)

【讨论】:

  • 假设我在monthlyData 数组中只有一个元素为2018-07 并且hashId 平行于7 现在这个日期在datesArr 中不存在所以这个元素应该从monthlyData 数组中删除,但是monthlyData 数组中的日期与 datesArr 不匹配应插入到monthlyData 中,数据键为空
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 2019-10-18
  • 2012-10-16
  • 1970-01-01
相关资源
最近更新 更多