SpiderPigAndCat
@SpiderPigAndCat
занимаюсь салообразованием

Как преобразовать json в массив обьектов?

c firebase приходит этот json
{
    "-M_MGfFRTFvwBsfLf0MT": {
        "cv_data": [{
            "id": 1,
            "text": "sadasdasdas",
            "type": "header"
        }]
    },
    "-M_MK_f6EmSm00btPj4G": {
        "cv_data": [{
            "id": 1,
            "text": "hhhh",
            "type": "text"
        }]
    },
    "-M_MW7WETDpX8S4UqJhW": {
        "cv_data": [{
            "id": 1,
            "text": "sssss",
            "type": "header"
        }]
    },
    "-M_MdjHGo4jyT5HB3LY1": {
        "cv_data": {
            "-M_MGfFRTFvwBsfLf0MT": {
                "cv_data": [{
                    "id": 1,
                    "text": "sadasdasdas",
                    "type": "header"
                }]
            },
            "-M_MK_f6EmSm00btPj4G": {
                "cv_data": [{
                    "id": 1,
                    "text": "hhhh",
                    "type": "text"
                }]
            },
            "-M_MW7WETDpX8S4UqJhW": {
                "cv_data": [{
                    "id": 1,
                    "text": "sssss",
                    "type": "header"
                }]
            }
        }
    }
};

как его преобразовать в примерно такой вид (поместить id буквенный в поле Id у обьекта и созранить остальные данные)
[
 {
     "id":  "-M_MK_f6EmSm00btPj4G",
     "text": "hhhh",
     "type": "text"
 }, 
 {
     "id":  "-M_MW7WETDpX8S4UqJhW",
     "text": "1111",
     "type": "header"
 }, 
]


есть пример с object.keys и .map но я не совсем понимаю как это работает, буду рад обьяснению
пока получается такно не совем так
  • Вопрос задан
  • 201 просмотр
Решения вопроса 3
TNPTSYWWCC
@TNPTSYWWCC
And I Told Them I Invented Times New Roman
Object.entries()
Array.prototype.map()
Array.isArray()
Array.prototype.flat()
Деструктурирующее присваивание

const flatObject = (o) =>
  Object.entries(o)
    .map(([id, v]) =>
      Array.isArray(v.cv_data)
        ? { ...v.cv_data.pop(), id }
        : flatObject(v.cv_data)
    )
    .flat();

console.log(flatObject(YOU_JSON_OBJECT));


609a4bb9685d6813771929.png
Ответ написан
Tom_Xor
@Tom_Xor
const valuesDeep = (obj, key) => Object.entries(obj)
    .flatMap(([id, v]) => 
        Array.isArray(v[key]) ? 
            (v[key].forEach(o => o.id = id), v[key]) : 
            valuesDeep(v, key))

console.log(valuesDeep(JSON.parse(JSON.stringify(data)), 'cv_data'))
Ответ написан
twobomb
@twobomb
function func(obj){
	let arr = [];
  for(let key in obj)
    if(Array.isArray(obj[key].cv_data)){
    	arr.push(obj[key].cv_data[0]);
      arr[arr.length-1].id = key;
      }
    else
    	arr = arr.concat(func(obj[key].cv_data));
  return arr;
}

let array = func(parseObjectFromFirebase);//result
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы