我有javascript
array
,并且想在此回复中获得count
密钥。
以下是回复:
var events = [
{
"success": true,
"data": {
"events": [
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 675,
"isSelected": false
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 690,
"isSelected": false
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 690,
"isSelected": true
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 705,
"isSelected": false
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 705,
"isSelected": true
}
]
},
"message": "Data found"
}
]
我想要这样的数组响应:
var events = [
{
"success": true,
"data": {
"events": [
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 675,
"isSelected": false,
"count": 1
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 690,
"isSelected": true,
"count": 2
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 705,
"isSelected": true,
"count": 2
}
]
},
"message": "Data found"
}
]
我需要添加count
键并计算发生相同startTime
值的次数,并根据object
删除重复的startTime
。请帮助我。
答案 0 :(得分:0)
只需减少子数组并计算出现次数,如下所示:
var events = [
{
"success": true,
"data": {
"events": [
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 675,
"isSelected": false
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 690,
"isSelected": false
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 690,
"isSelected": true
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 705,
"isSelected": false
},
{
"date": "2020-08-24T00:00:00.000Z",
"dayOfWeek": 1,
"startTime": 705,
"isSelected": true
}
]
},
"message": "Data found"
}
];
events = events.map(e => {
e['data']['events'] = e['data']['events'].reduce((acc, ev) => {
const index = acc.findIndex(existingEv => existingEv['startTime'] == ev['startTime']);
if(index != -1) {
acc[index]['count'] = acc[index]['count'] + 1;
acc[index]['isSelected'] = acc[index]['isSelected'] || ev['isSelected'];
} else {
acc.push({
...ev,
count: 1
});
}
return acc;
}, []);
return e;
});
console.log(events);
答案 1 :(得分:0)
使用Array.filter():
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
const _events_ = [];
const eventsNonDuplicated = events[0].data.events.filter((ev) => {
if (!_events_.some((v) => v == ev.startTime) ) {
_events_.push(ev.startTime);
return ev;
}
});
console.log(eventsNonDuplicated);