Не обрезайте []
, и все должно быть в порядке. []
идентифицируют массив JSON, который именно то, что вам нужно, чтобы выполнять итерацию его элементов.
Если я вас правильно понимаю, вы хотите объединить все страницы в одну страницу, которая содержит всю информацию.
Этого можно добиться с помощью функции 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]
). Если у вас действительно есть несколько значений в каждом массиве, вам придется перебирать все эти значения соответственно.