Javascript, как преобразовать строку массива в поля объекта

Мне нужно преобразовать эту структуру:

[
{"Field1": "value11", "Field2":"value21", "CField1":[{"Id": 1, "Value":"myValue11", "Flag":"Y"}, {"Id": 2, "Value":"myValue12", "Flag":"n"}]},
{"Field1": "value21", "Field2":"value22", "CField1":[{"Id": 1, "Value":"myValue21", "Flag":"Y"}, {"Id": 2, "Value":"myValue22", "Flag":"n"}]}
]

к

[
{"Field1": "value11", "Field2":"value12", "Value1": "myValue11", "Flag1":"Y", "Value2": "myValue12", "Flag2":"n"},
{"Field1": "value21", "Field2":"value21", "Value1": "myValue21", "Flag1":"Y", "Value2": "myValue22", "Flag2":"n"},
]

я нашел подобное решение:

tab.forEach(function (item) {
  transformedObject[item.key] = transformedObject[item.key] ? `${transformedObject[item.key]}, ${item.value}` : item.value;
});

console.info(transformedObject);

// Access the '2' property
console.info(transformedObject['2']);

но нужна помощь, чтобы адаптировать его к моему делу

Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете отобразить внутренний массив как новые объекты.

const
    data = [{ Field1: "value11", Field2: "value21", CField1: [{ Id: 1, Value: "myValue11", Flag: "Y" }, { Id: 2, Value: "myValue12", Flag: "n" }] }, { Field1: "value21", Field2: "value22", CField1: [{ Id: 1, Value: "myValue21", Flag: "Y" }, { Id: 2, Value: "myValue22", Flag: "n" }] }],
    result = data.map(({ CField1, ...o }) => Object.assign(
        o,
        ...CField1.map(({ Id, ...q }, i) => Object.fromEntries(Object
            .entries(q)
            .map(([k, v]) => [k + (i + 1), v])
        ))
    ));

console.info(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

по производительности может быть лучше, чем: ratings.forEach((элемент, индекс, массив) => { element.CField1.forEach((nuovo) => { element['Value' + nuovo.Id] = nuovo.Value; element[ 'Флаг' + nuovo.Id] = nuovo.Flag; }); });

gt.guybrush 12.12.2022 11:34

вы мутируете element, а это все еще содержит CField1.

Nina Scholz 12.12.2022 11:48

правильно, я могу удалить его. не уверен, что может быть быстрее

gt.guybrush 12.12.2022 12:18

сколько у тебя предметов?

Nina Scholz 12.12.2022 12:26

до нескольких тысяч

gt.guybrush 12.12.2022 17:16

Вы можете сопоставить свои данные следующим образом:

data = [
{"Field1": "value11", "Field2":"value21", "CField1":[{"Id": 1, "Value":"myValue11", "Flag":"Y"}, {"Id": 2, "Value":"myValue12", "Flag":"n"}]},
{"Field1": "value21", "Field2":"value22", "CField1":[{"Id": 1, "Value":"myValue21", "Flag":"Y"}, {"Id": 2, "Value":"myValue22", "Flag":"n"}]}
]

console.info(data.map(function(value, key) {
  return Object.entries(value).reduce(function(carry, [ key, value ]) {
    if (key !== 'CField1') {
      carry[key] = value
    } else {
      carry = Object.assign(carry, value.reduce(function(innerCarry, value, key) {
         innerCarry[`Flag${value.Id}`] = value.Flag
         innerCarry[`Value${value.Id}`] = value.Value
         return innerCarry;
      }, {}))
    }
    return carry
  }, {})
}))

Другие вопросы по теме