Ваш желаемый результат неясен, но вы сказали, что хотели старые / новые пары.Этот ответ отличается от других тем, что он создает массив объединенных объектов данных, состоящих из старых / новых пар, где значения oldData
дублируются для отображения рядом с каждым соответствующим значением newData
в пределах его элемента списка.
ваши исходные данные после первого обновления вопроса:
let list = [
{
oldData: { title: 'abc', id: 1, date: '1982-09-30', budget: 250000 },
newData: [
{ key: 1, data: null, value: 5 },
{ key: 2, data: null, value: 22 },
//...
],
},
{
oldData: { title: 'blablablaaaaa', id: 2, date: '2012-02-23', budget: 350000 },
newData: [
{ key: 1, data: null, value: 35 },
{ key: 2, data: null, value: 41 },
//...
],
},
//... some more datas...
];
Этот код отображает каждый элемент списка {old,new[]}
в массивы пар [{old,new}, {old,new}, ...]
, которые объединяются в последнем вызове reduce()
:
var combinedDatas = list
.map(listItem => listItem.newData.map(newItem => ({
oldData: listItem.oldData,
newData: newItem
})))
.reduce();
console.log(JSON.stringify(oldNewCombos, null, 4));
создает список денормализованных пар:
[
{ list[0].oldData, list[0].newData[0] },
{ list[0].oldData, list[0].newData[1] },
//...rest of list[0] oldData with newData[n] combos
{ list[1].oldData, list[1].newData[0] },
{ list[1].oldData, list[1].newData[1] },
//...rest of list[1] oldData with newData[n] combos
{ list[2].oldData, list[2].newData[0] },
{ list[2].oldData, list[2].newData[1] },
//...rest of list[2] oldData with newData[n] combos
//...
]