У меня есть объект или массив объектов с реквизитами, содержащими строки, массивы и другие объекты.
Я хочу преобразовать вложенные массивы, содержащие объекты с языком поддержки, в объект с языком в качестве ключа и самим объектом в качестве свойства.
Допустим, я хочу рекурсивно преобразовать этот объект:
{
"WhatPage": [
{
"id": 1,
"WhatPageTranslations": [
{
"id": 1,
"title": "What",
"WhatPageId": 1,
"language": "en"
},
{
"id": 2,
"title": "Qué",
"WhatPageId": 1,
"language": "es"
},
],
"WhatPageImages": [
{
"id": 1,
"title": "image title 1",
"WhatPageId": 1,
"WhatPageImagesTranslations": [
{
"id": 1,
"title": "What",
"WhatPageImageId": 1,
"language": "en"
},
{
"id": 2,
"title": "Qué",
"WhatPageImageId": 1,
"language": "es"
},
]
},
]
}
]
}
Затем я могу использовать эту функцию, которая проверяет, является ли она массивом или объектом, и рекурсивно преобразовывает данные:
export const transformTranslatedData = function(data) {
var clonedData = JSON.parse(JSON.stringify(data));
const transform = function(data) {
for (var prop in data) {
if (data[prop].length > 0 && data[prop] instanceof Array && data[prop][0].hasOwnProperty('language')) {
var transformedData = data[prop].reduce(function(prev, current, index) {
prev[current.language] = current;
return prev;
}, {});
data[prop] = transformedData;
} else if (data[prop] instanceof Object && !(data[prop] instanceof Array)) {
transformTranslatedData(data[prop]);
} else if (data[prop] instanceof Array) {
let array = JSON.parse(JSON.stringify(data[prop]));
array.forEach((item) => {
transformTranslatedData(item);
});
}
}
return data;
};
if (clonedData instanceof Array) {
var newData = [];
clonedData.map((item) => {
newData.push(transform(item));
});
} else if (clonedData instanceof Object && !(clonedData instanceof Array)) {
var newData = {};
newData = transform(clonedData);
}
return newData;
};
Это работает, но только для первого уровня объекта - WhatPageTranslations
-. На втором уровне, когда он достигает WhatPageImagesTranslations
, он преобразует данные, но эти данные не добавляются к объекту.
Если кто-нибудь знает, почему это происходит, я был бы благодарен!