Мне нужно преобразовать эту структуру:
[
{"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']);
но нужна помощь, чтобы адаптировать его к моему делу
Спасибо



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


Вы можете отобразить внутренний массив как новые объекты.
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; }вы мутируете element, а это все еще содержит CField1.
правильно, я могу удалить его. не уверен, что может быть быстрее
сколько у тебя предметов?
до нескольких тысяч
Вы можете сопоставить свои данные следующим образом:
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
}, {})
}))
по производительности может быть лучше, чем: ratings.forEach((элемент, индекс, массив) => { element.CField1.forEach((nuovo) => { element['Value' + nuovo.Id] = nuovo.Value; element[ 'Флаг' + nuovo.Id] = nuovo.Flag; }); });