У меня есть этот JSON, который я анализирую с помощью NodeJS, и его нужно преобразовать во второй JSON, который я добавил ниже.
В первом JSON объект rows имеет два объекта pages (может присутствовать любое количество объектов pages), которые содержат все те же ключи и значения, за исключением ключей values и display.
{
"pages": [
{
"label": "SomeLabel",
"name": "Some",
"sections": [
{
"type": "Repeat",
"label": "Label 1",
"name": "Name 1",
"rows": [
{
"pages": [
{
"label": "Label 1",
"name": "Name 1",
"sections": [
{
"type": "Flow",
"label": "Label 2",
"name": "Name 2",
"answers": [
{
"label": "Question Label",
"question": "Question",
"values": [
"Value A"
],
"valuesMetadata": [
{
"display": "Display A",
"row": {
"columns": []
}
}
]
}
]
}
]
}
]
},
{
"pages": [
{
"label": "Label 1",
"name": "Name 1",
"sections": [
{
"type": "Flow",
"label": "Label 2",
"name": "Name 2",
"answers": [
{
"label": "Question Label",
"question": "Question",
"values": [
"Value B"
],
"valuesMetadata": [
{
"display": "Display B",
"row": {
"columns": []
}
}
]
}
]
}
]
}
]
}
],
"footer": null
}
]
}
]
}
Во втором JSON объект rows имеет один объект pages, внутри которого ключи values и display имеют несколько значений (необычные значения).
{
"pages": [
{
"label": "SomeLabel",
"name": "Some",
"sections": [
{
"type": "Repeat",
"label": "Label 1",
"name": "Name 1",
"rows": [
{
"pages": [
{
"label": "Label 1",
"name": "Name 1",
"sections": [
{
"type": "Flow",
"label": "Label 2",
"name": "Name 2",
"answers": [
{
"label": "Question Label",
"question": "Question",
"values": [
"Value A",
"Value B"
],
"valuesMetadata": [
{
"display": [
"Display A",
"Display B"
],
"row": {
"columns": []
}
}
]
}
]
}
]
}
]
}
],
"footer": null
}
]
}
]
}
Итак, я хочу знать, как быстро и легко это сделать. Пожалуйста, дайте мне знать процесс и методы решения этой проблемы.
Спасибо
Было бы легче читать/решать, если бы вы явно указали нам различия между старым и новым json.
Привет, @Scorpioo590, я отредактировал свой пост, добавив более короткий JSON и более описательное резюме. Пожалуйста, помогите мне!
@ G.aziz, пожалуйста, ознакомьтесь с моим отредактированным вопросом и помогите мне.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если я вас правильно понял, вы хотите объединить все страницы в одну страницу, содержащую всю информацию.
Этого можно добиться с помощью функции Array.reduce. reduce берет массив и объединяет все элементы в одно значение, используя функцию (предоставленную вами) для объединения первых двух элементов, пока не останется только один (т. е. 1 * 2 => new1; new1 * 3 => new2, где * представляет вашу функцию).
Ваша проблема будет выглядеть примерно так:
rows[0].pages = rows[0].pages.reduce((currentElement, currentState) => {
if (!currentState) { // first iteration return first element but make sure display is an array
currentElement.sections[0].answers[0].valuesMetadata[0].display =
[currentElement.sections[0].answers[0].valuesMetadata[0].display];
return currentElement;
}
// add values of current element to arrays in current state
currentState.sections[0].answers[0].values
.concat(currentElement.sections[0].answers[0].values);
currentState.sections[0].answers[0].valuesMetadata[0].display
.concat(currentElement.sections[0].answers[0].valuesMetadata[0].display);
return currentState;
});
currentElement — объект массива, который в данный момент сокращается, currentState — промежуточный результат сокращения.
Объект выглядит так, как будто у вас слишком много массивов, где они вам не нужны. Данный фрагмент кода работает только для первого элемента в каждом массиве (отсюда и [0]s. Если у вас действительно есть несколько значений в каждом массиве, вам придется перебирать их все соответственно.
Не могли бы вы привести пример с циклами? Это та часть, с которой я застрял.
Можете ли вы изменить это в небольшом примере
inputиoutput, чтобы они могли легко помочь