问题描述
我有一个这样的对象数组
[
{
"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","createdAt": "2020-08-14T02:55:43.988Z","hashId": "5"
}
]
我有一个数组,其中包含月-年的列表
let datesArr = ['2020-08','2020-07','2020-06','2020-05','2020-04','2020-03','2020-02','2020-01','2019-12']
现在,我要从原始数组中删除那些date (on dateYear key)
与dateArr中指定的任何日期都不匹配的项目。
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,现在dateArr中不存在此日期,因此应从monthlyData数组中删除此元素,但是在monthlyData数组中则删除与dateArr不匹配应将数据密钥插入为空
每个hashId可以存储很多个月的数据,因此,为什么monthlyData是一个数组。
解决方法
使用过滤器和一些方法
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","createdAt": "2020-08-14T02:55:43.988Z","hashId": "5"
}
]
let datesArr = ['2020-08','2020-07','2020-06','2020-05','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)