Я хотел бы объединить последовательные объекты данных в массиве на основе условий. У меня есть маршрутный массив, где каждый объект является участком этой поездки. Рассмотрим следующие примеры:
Поездка 1: WALK - WALK - WALK - VEHICLE - WALK - VEHICLE - WALK
^ short transfer
Поездка 2: WALK - WALK - WALK - VEHICLE - WALK - WALK - VEHICLE - WALK - VEHICLE
Поездка 3: WALK - WALK - VEHICLE - WALK - WALK
То, что я хотел бы сделать, это объединить WALK
ветви, если они последовательные (сразу после друг друга), в одну WALK
ногу, охватывающую объединенные части, см. Ниже:
Поездка 1: WALK - VEHICLE - WALK - VEHICLE - WALK
^ short transfer
Поездка 2: WALK - VEHICLE - WALK - VEHICLE - WALK - VEHICLE
Поездка 3: WALK - VEHICLE - WALK
Каждый объект ноги выглядит примерно так:
{
mode: 'WALK', // or VEHICLE
to: { ... },
from: { ... }
}
Я пытался использовать .reduce()
и с помощью его текущей индексной группы объектов объединить разные детали, но безуспешно. Я даже не знаю, правильная ли это функция.
const oldTrip = [
{ mode: 'WALK' },
{ mode: 'WALK' },
{ mode: 'VEHICLE' },
{ mode: 'VEHICLE' },
{ mode: 'WALK' }
];
let previousWalk = false;
const newTrip = oldTrip.reduce((acc, cur, idx) => {
if (cur.mode === 'VEHICLE') previousWalk = false;
else {
if (previousWalk) {
}
previousWalk = true;
}
return acc;
});
Любая помощь или толчок в правильном направлении очень ценится!