Как дать одинаковые номера дня для всех одинаковых дат, присутствующих в массиве - PullRequest
0 голосов
/ 01 июня 2019

Мне нужно увеличить количество дней только в случае изменения даты. (Та же дата = то же число дней)

Входной сигнал: -

{"employees":[
  {"day":1,"date":"2019-09-01T18:15:00", "firstName":"John", "lastName":"Doe" },
  {"day":2,"date":"2019-09-01T18:15:00", "firstName":"Anna", "lastName":"Smith" },
  {"day":3,"date":"2019-09-02T18:15:00", "firstName":"Peter", "lastName":"Jones" },
  {"day":4,"date":"2019-09-03T18:15:00", "firstName":"John", "lastName":"Doe" },
  {"day":5,"date":"2019-09-03T18:15:00", "firstName":"Anna", "lastName":"Smith" },
  {"day":6,"date":"2019-09-04T18:15:00", "firstName":"Peter", "lastName":"Jones" }    
]}

Ouput: -

{"employees":[
  {"day":1,"date":"2019-09-01T18:15:00", "firstName":"John", "lastName":"Doe" },
  {"day":1,"date":"2019-09-01T18:15:00", "firstName":"Anna", "lastName":"Smith" },
  {"day":2,"date":"2019-09-02T18:15:00", "firstName":"Peter", "lastName":"Jones" },
  {"day":3,"date":"2019-09-013T18:15:00", "firstName":"John", "lastName":"Doe" },
  {"day":3,"date":"2019-09-013T18:15:00", "firstName":"Anna", "lastName":"Smith" },
  {"day":4,"date":"2019-09-04T18:15:00", "firstName":"Peter", "lastName":"Jones" }     
]}

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Вы можете проверить последнюю дату и фактический счетчик дней.

var data = { employees: [{ day: 1, date: "2019-09-01T18:15:00", firstName: "John", lastName: "Doe" }, { day: 2, date: "2019-09-01T18:15:00", firstName: "Anna", lastName: "Smith" }, { day: 3, date: "2019-09-02T18:15:00", firstName: "Peter", lastName: "Jones" }, { day: 4, date: "2019-09-03T18:15:00", firstName: "John", lastName: "Doe" }, { day: 5, date: "2019-09-03T18:15:00", firstName: "Anna", lastName: "Smith" }, { day: 6, date: "2019-09-04T18:15:00", firstName: "Peter", lastName: "Jones" }] },
    day = 0;
    result = { employees: data.employees.map((o, i, { [i - 1]: p = {} }) => Object.assign(
        {},
        o,
        { day: o.date === p.date ? day : ++day }
    )) };

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 01 июня 2019

используйте reduce. Установите day на 1 для первого ввода. Для следующего элемента проверьте, совпадает ли дата с предыдущей, если да, тогда установите день, такой же, как предыдущий, еще раз, увеличивайте его количество дней.

const input = [
  {"day":1,"date":"2019-09-01T18:15:00", "firstName":"John", "lastName":"Doe" },
  {"day":2,"date":"2019-09-01T18:15:00", "firstName":"Anna", "lastName":"Smith" },
  {"day":3,"date":"2019-09-02T18:15:00", "firstName":"Peter", "lastName":"Jones" },
  {"day":4,"date":"2019-09-03T18:15:00", "firstName":"John", "lastName":"Doe" },
  {"day":5,"date":"2019-09-03T18:15:00", "firstName":"Anna", "lastName":"Smith" },
  {"day":6,"date":"2019-09-04T18:15:00", "firstName":"Peter", "lastName":"Jones" }
];

const output = input.reduce((accu, {day, date, ...rest}, i) => {
    if(i==0) accu.push({"day": 1, date, ...rest});
    else {
        if(date === accu[i-1].date) {
            accu.push({"day" : accu[i-1].day, date, ...rest})   
        } else {
            accu.push({"day": accu[i-1].day + 1, date, ...rest});
        }
    }
    return accu;

}, []);

console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...