Object.entries()
берет объект и преобразует его в двумерный массив:
let object = {keyA: "valueA", keyB: "valueB", keyC: {kA: "vA", kB: "vB"}};
let array = Object.entries(object);
// array = [["keyA", "valueA"], ["keyB", "valueB"], ["keyC", {kA: "vA", kB: "vB"}]];
Используя вышеупомянутое в for...of
l oop, каждая запись может быть деструктурирована:
for (let [key, value] of Object.entries(object)) {...
Объявить пустой массив и выполнить итерацию по каждому литералу объекта в массиве объектов:
let array = [];
for (let obj of objArray) {...
Для каждого объекта объявите пустой объект и затем преобразуйте каждый ключ / значение каждого объекта в подмассив:
let object = {};
for (let [key, value] of Object.entries(obj)) {...
Проверьте каждое значение каждого литерала объекта - если значение является литералом объекта ...
if (Object.prototype.toString.call(value) == "[object Object]") {...
... итерация по значению и назначение каждого ключа / значения пустому объекту .. .
for (let [k, v] of Object.entries(value)) {
object[k] = v;
}
... в противном случае присвойте ключ / значение пустому объекту ...
} else {
object[key] = value;
}
Pu sh новый объект для нового массива:
array.push(object);
Демо
const data = [{
parKeyA: "parValA",
parKeyA1: {
chiKeyA1: "chiValA1",
chiKeyA2: "chiValA2"
},
parKeyA2: {
chiKeyA3: "chiValA3"
}
},
{
parKeyB: "parValB",
parKeyB1: {
chiKeyB1: "chiValB1"
}
}
];
function subObjToKeyVal(objArr) {
let array = [];
for (let obj of objArr) {
let object = {};
for (let [key, value] of Object.entries(obj)) {
if (Object.prototype.toString.call(value) == "[object Object]") {
for (let [k, v] of Object.entries(value)) {
object[k] = v;
}
} else {
object[key] = value;
}
}
array.push(object);
}
return array;
}
console.log(subObjToKeyVal(data));