Изменение значений вложенных объектов - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть объект JS, который я пытаюсь перебрать и изменить значения.

Пример объекта ниже:

var response = { 
'2433345':
[ 
{ 
   taskId: 20295179,
   stageId: 'AB-5R-GF', 
},
{ 
   taskId: 20295176,
   stageId: 'AB-5R-GF',
},
],
'2539643':
[
{ 
   taskId: 28295179,
   stageId: 'AB-5R-RD', 
},
{ 
   taskId: 20445176,
   stageId: 'AB-5R-ZZ',
},
]
}

Родительскими значениями являются JobID, а затем массив с вложенными объектами для каждого этапа и задачи в этом задании.

Я пытаюсь перебрать и изменить значения stageID на последовательные числа. Каждый номер в задании выше, чем последний, сохраняя дубликаты одного и того же номера.

Желаемый результат будет:

var response = { 
'2433345':
[ 
{ 
   taskId: 20295179,
   stageId: 1, 
},
{ 
   taskId: 20295176,
   stageId: 1,
},
],
 '2539643':
 [
 { 
   taskId: 28295179,
   stageId: 1, 
   },
   { 
   taskId: 20445176,
   stageId: 2,
},
]
}

Мне интересно, каков наилучший подход для решения этой проблемы? Будет ли лучше использовать Lodash и _.uniqBy?

1 Ответ

0 голосов
/ 30 апреля 2018

Даже если вы не показали свой собственный код - вот моя собственная попытка. Не проверено - но здесь есть объяснение. Перестраивая результат, мы начинаем с {}, и для элементов массива каждого значения мы записываем поверх stageItem с индексом, который увеличивается.

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

var index = 0;
var finalResult = _.reduce(response, function(result, value, key) {
  indexOfIDs = {};
  result[key] = [];
  _.each(value, function(item){
    if(typeof indexOfIds[item.taskId] !== 'undefined'){
       result[key].push(_.assign(item, {stageId: indexOfIds[item.taskId]}))
    } else {
       indexOfIds[item.taskId] = index++;
       result[key].push(_.assign(item, {stageId: index}))
    }

  })
  return result;
}, {})
...