@DAntoshin20

Как пронумеровать поля в записях?

Народ, всем привет. Прошу, помогите решить одну задачку:

Есть набор записей, в которых одно из полей заполнено цифрой. Запись (record) имеет уникальный номер в поле number и поле pr , которое содержит цифры, а так же прочий набор полей чем-то заполненных.
к примеру (не все варианты, а пример возможных):
I)
1,2,4,5 - сделать такое - 1,2,3,4 (т.е. 4 стала 3, а 5 стала 4)
или
II)
1,3,5 - сделать такое - 1,2,3 (т.е. 3 стала 2, а 5 стала 3)
или
III)
1,4,5 - сделать такое - 1,2,3 (т.е. 4 стала 2, а 5 стала 3)
или
IV)
2,4,5 - сделать такое - 1,2,3 (т.е. 2 стала 1, а 4 стала 2, а 5 стала 3)

Или полнее для I) примера приведенного выше:
запись number=100 имеет pr=1; запись number=101 имеет pr=2; запись number=223 имеет pr=4; запись number=190 имеет pr=5
Должно стать:
запись number=100 имеет pr=1; запись number=101 имеет pr=2; запись number=223 имеет pr=3; запись number=190 имеет pr=4

Что-то я красиво написал слишком - записи не выстроены по порядку так как я их написал в I)... - это просто я так их отобразил.
По сути необходимо сохраняя старшинство цифр, перенумеровать их в последовательный ряд от одного.
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 2
WblCHA
@WblCHA
Если я правильно понял, то сортируешь по ид, если массив неотсортирован, и тупо форычем нумеруешь их (насколько я понял, это объекты).

Редакт.:
Из-за отвратительного кода DevAB96, я таки напишу нормальный код.
const arr = [
    { number: 100, pr: 1 },
    { number: 101, pr: 2 },
    { number: 190, pr: 5 },
    { number: 223, pr: 4 }
	];
  
  // если порядок оригинального массива нужно отсортировать,
  // то: arr.sort
  const sortedArr = [...arr].sort((el1, el2) => el1.pr - el2.pr);
  
  sortedArr.forEach((el, index) => {
    el.pr = index + 1;
  });
  
  console.log(arr);
  console.log(sortedArr);
Ответ написан
Комментировать
@vladdimir
Верстальщик
Что-то я красиво написал слишком

Точняк, я даже кровавую слезу пустил от умиления!

Я так понял, что порядок не имеет значения, а я это понял из этого фрагмента красоты:
запись number=100 имеет pr=1; запись number=101 имеет pr=2; запись number=223 имеет pr=4; запись number=190 имеет pr=5
Должно стать:
запись number=100 имеет pr=1; запись number=101 имеет pr=2; запись number=223 имеет pr=3; запись number=190 имеет pr=4

То, можно так:
const numbered = records.map((el, index) => ({...el, pr: index + 1}) ) // numbered - новый массив с нужной нумерацией pr
// если нужно изменить на месте, то через forEach изменить свойство pr
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы