увеличивать повторяющееся значение объекта в любом массиве объектов в скрипте java - PullRequest
1 голос
/ 05 мая 2020

У меня есть 5 полей возраста, где пользователь может ввести то же значение, которое они не проверяют при отправке в API. Мне нужно увеличить повторяющиеся возрасты в объекте ech.

для ex - если пользователь указывает возраст, например 10, 11, 10, 10, 20, мне это нужно как 10,11,12,13,20, как это

Вот переменная, имеющая дубликат:

var family = [
  {
    name: "Mike",
    age: 10
  },
  {
    name: "Matt"
    age: 13
  },
  {
    name: "Nancy",
    age: 13
  },
  {
    name: "Adam",
    age: 22
  },
  {
    name: "Jenny",
    age: 23
  },
  {
    name: "Nancy",
    age: 22
  }
];

, где появляются все повторяющиеся значения, я должен увеличивать, проверяя все возрасты в каждом объекте, который мне нужно поместить, как это -> здесь возраст 13 и 22 дублируется, я должен проверить все возрасты, и мне нужно увеличить второй повторяющийся возраст на +1 ->

var family = [
  {
    name: "Mike",
    age: 10
  },
  {
    name: "Matt"
    age: 13
  },
  {
    name: "Nancy",
    age: 14
  },
  {
    name: "Adam",
    age: 22
  },
  {
    name: "Jenny",
    age: 23
  },
  {
    name: "Nancy",
    age: 24
  }
];

обратите внимание, что в моем массиве будет только 5 объектов

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Попробуйте с кодом ниже. Надеюсь, это поможет тебе.

var family = [
  {
    name: "Mike",
    age: 10
  },
  {
    name: "Matt",
    age: 13
  },
  {
    name: "Nancy",
    age: 13
  },
  {
    name: "Adam",
    age: 22
  },
  {
    name: "Jenny",
    age: 23
  },
  {
    name: "Nancy",
    age: 22
  }
];
var ind = [];
family.forEach(a => {
  cur = a.age;
  while (ind[cur] === 1) {
     cur++;
  }
  ind[cur] = 1;
  a.age = cur;
});
family.forEach(a => console.log(a.age));
0 голосов
/ 05 мая 2020

Еще одно обновление:

var order = family.map((person, index) => {
  return { index, person };
  }).sort((a, b) => {
      if (a.person.age === b.person.age) {
         return a.index - b.index;
      }
      return a.person.age > b.person.age ? 1 : -1;
  });

var prevAge = 0;
order.forEach(item => {
  if (item.person.age <= prevAge) {
    item.person.age = ++prevAge;
  }
  prevAge = item.person.age;
  family.filter(f => f.name === item.person.name)[0].age = item.person.age;
});

Пожалуйста, попробуйте разные случаи, которые я использовал в демонстрации, и проверьте, соответствуют ли результаты ожидаемым.

Stackblitz: https://stackblitz.com/edit/typescript-far3zq

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